pedrotuga Posted November 21, 2006 at 06:42 PM Report #65785 Posted November 21, 2006 at 06:42 PM 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ê?
Triton Posted November 21, 2006 at 07:14 PM Report #65794 Posted November 21, 2006 at 07:14 PM 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). 😄 Caso tenhas mais alguma dúvida, força! 😞 <3 life
pedrotuga Posted November 21, 2006 at 10:16 PM Author Report #65859 Posted November 21, 2006 at 10:16 PM 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 😞
Rui Carlos Posted November 21, 2006 at 10:23 PM Report #65862 Posted November 21, 2006 at 10:23 PM 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 Rui Carlos Gonçalves
Triton Posted November 22, 2006 at 12:47 AM Report #65908 Posted November 22, 2006 at 12:47 AM É 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! <3 life
pedrotuga Posted November 22, 2006 at 04:57 AM Author Report #65924 Posted November 22, 2006 at 04:57 AM Não me parece uqe gerem um coisa inteligível em tempo útil.
rolando2424 Posted November 22, 2006 at 12:01 PM Report #65938 Posted November 22, 2006 at 12:01 PM Quando falas de compiladores estás a falar de IDE's? É que se for assim, eu no Linux utilizo o IDLE 😞 Não me responsabilizo por qualquer dano ocorrido no seguimento dos meus conselhos. Prontos, a minha pessoa está oficialmente protegida legalmente 😄
Rui Carlos Posted November 22, 2006 at 12:12 PM Report #65948 Posted November 22, 2006 at 12:12 PM É 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...). Rui Carlos Gonçalves
pedrotuga Posted November 22, 2006 at 03:29 PM Author Report #65987 Posted November 22, 2006 at 03:29 PM 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?
Rui Carlos Posted November 22, 2006 at 04:01 PM Report #65994 Posted November 22, 2006 at 04:01 PM 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. Rui Carlos Gonçalves
Triton Posted November 23, 2006 at 02:00 AM Report #66133 Posted November 23, 2006 at 02:00 AM 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. 😄 <3 life
pedrotuga Posted November 23, 2006 at 03:06 AM Author Report #66139 Posted November 23, 2006 at 03:06 AM 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.
Triton Posted November 23, 2006 at 03:12 AM Report #66140 Posted November 23, 2006 at 03:12 AM É 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. <3 life
Guest tsenart Posted December 2, 2006 at 02:47 AM Report #68245 Posted December 2, 2006 at 02:47 AM 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...
pedrotuga Posted December 2, 2006 at 03:41 AM Author Report #68248 Posted December 2, 2006 at 03:41 AM 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.
Triton Posted December 2, 2006 at 03:53 AM Report #68250 Posted December 2, 2006 at 03:53 AM 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. 😛 <3 life
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now