Jump to content

Umas duvidas existenciais que me vão aparecendo


Recommended Posts

Posted

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ê?

Posted

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

Posted

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 😞

Posted

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

Posted

É 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

Posted

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 😄

Posted

É 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...).

Posted

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?

Posted

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.

Posted

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

Posted

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.

Posted

É 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

  • 2 weeks later...
Posted

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...

Posted

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.

Posted

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.