• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

pedrotuga

Umas duvidas existenciais que me vão aparecendo

16 mensagens neste tópico

Ok, uma reedição do tópico do david em php mas desta vez em python.

Primeira:

Ao que parece os arrays em python chamam-se listas. O python suporta listas associativas ou só suporta listas com índices numéricos?

Segunda:

Se eu quiser distribuir um programa de código fechado posso compilar os .py para .pyc certo? Qual o comando para fazer isto?

Terceira:

Qual compilador usam para o windows e porquê?

quarta:

Qual compilador usam para linux e porquê?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em Python as listas associativas são chamadas dicionários e defines da seguinte forma:

x = {'ola': 'pap', 'sou': 'triton'}

Quanto à implementação, o melhor e oficial é a CPython, as outras implementações como JPython ou IronPython (.NET) e PyPy (Python) estão sempre em desenvolvimento e não são nada aconselhadas, pois ninguém as tem instalados, ao contrários da CPython que vem instalada com praticamente todos os sistemas baseados em *NIX (Linux, MacOS, etc...).

Quanto à tua outra dúvida:

Python source code is automatically compiled into Python byte code by the CPython interpreter. Compiled code is usually stored in PYC (or PYO) files, and is regenerated when the source is updated, or when otherwise necessary.

Python automatically compiles Python source code when you import a module, so the easiest way to create a PYC file is to import it. If you have a module mymodule.py, just do:

>>> import mymodule

to create a mymodule.pyc file in the same directory. A drawback is that it doesn't only compile the module, it also executes it, which may not be what you want. (however, it does compile the entire script even if it fails to execute the script).

To do this programmatically, and without executing the code, you can use the py_compile module:

import py_compile

py_compile.compile("mymodule.py")

There's also a compileall module which can be used to compile all modules in an entire directory tree.

import compileall

compileall.compile_dir("mylib", force=1)

Atenção que o teu código não fico totalmente protegido, sendo Python uma linguagem interpretada o código é compilado para byte-code, mas penso ser muito díficil chegar ao programa original com o byte-code, mas como em Java podes usar um obfuscador para tornar essa tarefa ainda mais díficil: pyobfuscate (não sei se funciona, nunca testei). :D

Caso tenhas mais alguma dúvida, força! :(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu sei como funciona um obfuscador, muda os nomes das variáveis e funções todas para nomes coim muitos numero e tira qq identaçao. Esta segunda parte não podes ser utilizada em python como é obvio. Mas de qq modo.... se o python for compilado como raio é que podem recuperar o código?

Obrigado pelas respostas :(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas de qq modo.... se o python for compilado como raio é que podem recuperar o código?

eu cheguei a fazer isso para C (a partir de Assembly chegar ao código C que o tinha originado), para Python não deve ser muito diferente (apesar de provavelmente ser mais complicado visto que se trata de uma linguagem de mais alto nível)...

EDIT:ops... enganei-me outra vez... volta e meia clico em modificar em vez de citar.

Espero deixar tudo como estava

pedrotuga

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É mais fácil! Como sabem o mesmo se passa em Java, que é compilado para byte-code, logo é possível descompilar o ficheiro, apesar de não gerer código igual, gera código compatível. :(

Não sei se existem ferramentas para isso em Python, só estou a dizer que é possível!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quando falas de compiladores estás a falar de IDE's?

É que se for assim, eu no Linux utilizo o IDLE :(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É mais fácil! Como sabem o mesmo se passa em Java, que é compilado para byte-code...

eu refiria-me a quando compilamos um programa em Python para código máquina/assembly (o que penso que também deve ser possível...).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Oh rui, quando se compila um programa ele não fica em assembly, fica em bytecode.

Anyway... os computadores funcionam com números, qualquer que seja a aplicação compilada não me parece viável ler o bytecode e perceber alguma coisa do código original. Tipo... se não as aplicações eram todas de código aberto.

Na verdade todas as aplicações são de bytecode aberto, acho que a discussão não deve ir por aí. Triton, quando disseste que o meu código não ficou totalmente referido é que eu fiquei intrigado.

Que código é que fica totalmente protegido? O compilador de python não compila tal como todos os outros? Sendo assim não há código protegido. A que é que te referias?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Oh rui, quando se compila um programa ele não fica em assembly, fica em bytecode.

o gcc (por exemplo) tanto permite compilar programas para assembly como para bytecode.

mas o bytecode é uma tradução literal de instruções assembly da arquitectura do pc que estás a usar, ou seja, é código assembly em binário.

já com o Java é gerado código para uma máquina virtual.

era essa a distinção que eu queria fazer, entre código binário "assembly" e código binário para uma máquina virtual.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que tentei dizer é que no caso do Java o código fonte é compilado para um código dito byte-code, que é um código intermédio que é interpretado na máquina virtual, de forma a que a compilação não seja feita totalmente na execução do programa. O mesmo se passa com Python e .NET (MSIL).

Eu sei que em Java existem descompiladores como o Jad, que consegue gerar código fonte compatível, e se não usares um obfuscador, consegue mesmo recuperar os nomes originais das variáveis.

Ora, eu só disse que se é possível em Java, também é possível em Python mas não sei se existem ferramentas para o fazer. Espero que tenham ficado esclarecidos. :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, então nesse caso foi lançado um falso alarme. Isso não é tão simples como se pode pensar numa primeira leitura dos vossos posts. Um programa compilado tem o código fonte protegido. O código ofuscado ou não gera exactamente o mesmo bytecode.

Mas olha que bytecode n é um código intermédio.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É um código intermédio... é um código que não tem plataforma definida, é universal, só no momento de execução é que o código é traduzido on-the-fly para código binário dependo da arquitectura em que a VM está a correr.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpem lá.... mas vcs tao para ai a falar de compiladores de Python?!?!

Que eu saiba python é uma linguagem interpretada... Ou seja... Usa interpretadores.

Correct me if i'm wrong...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpem lá.... mas vcs tao para ai a falar de compiladores de Python?!?!

Que eu saiba python é uma linguagem interpretada... Ou seja... Usa interpretadores.

Correct me if i'm wrong...

sim, é interpretada, mas podes compila-la se quiseres. De resto, em ultima análise qualquer linguagem tem que ser compilada para correr, nem que seja linha a linha o que é o caso dos interpretadores.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpem lá.... mas vcs tao para ai a falar de compiladores de Python?!?!

Que eu saiba python é uma linguagem interpretada... Ou seja... Usa interpretadores.

Correct me if i'm wrong...

Como já disse anteriormente a linguagem é compilada para bytecode, esse código é que é interpretado. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora