Quem já trabalhou com Shell Script ou já fez algum curso mais aprofundado sobre um sistema operacional, sabe da importância da variável PATH. Pythonicamente falando, a variável PATH é uma lista de strings, onde cada elemento é um caminho (path) para um diretório do sistema onde há bibliotecas, executáveis, arquivos de documentação e coisas do tipo. Dessa forma, quando você manda o sistema executar um comando, ele procura em todos os diretórios presentes no PATH, verificando se o mesmo está lá. Se estiver, ele o executa. Senão:
Esta variável é fundamental para o funcionamento dos principais sistemas operacionais da atualidade (Linux, OS X e Windows), tanto que programas como o interpretador Python implementam um sistema similar de busca para seus módulos.
Como este tutorial explica, quando um módulo chamado spam (por exemplo) é importado, o interpretador procura por um arquivo chamado spam.py no diretório corrente (o diretório de onde o interpretador foi chamado) e no PATH de Python, para importá-lo.
Para visualizar o PATH de Python, basta importar o módulo sys e executar o comando sys.path. A listagem abaixo mostra a saída deste comando no OS X.
Esta variável é fundamental para o funcionamento dos principais sistemas operacionais da atualidade (Linux, OS X e Windows), tanto que programas como o interpretador Python implementam um sistema similar de busca para seus módulos.
Como este tutorial explica, quando um módulo chamado spam (por exemplo) é importado, o interpretador procura por um arquivo chamado spam.py no diretório corrente (o diretório de onde o interpretador foi chamado) e no PATH de Python, para importá-lo.
Para visualizar o PATH de Python, basta importar o módulo sys e executar o comando sys.path. A listagem abaixo mostra a saída deste comando no OS X.
Python 2.5.1 (r251:54863, Apr 15 2008, 22:57:26) [GCC 4.0.1 (Apple Inc. build 5465)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.path ['', '/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python25.zip', '/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5', '/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-darwin', '/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-mac', '/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-mac/lib-scriptpackages', '/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python', '/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-tk', '/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload', '/Library/Python/2.5/site-packages', '/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python/PyObjC'] >>>
Listagem 1. Saída do comando sys.path no OS X Leopard.
No caso, path é uma variável do módulo sys que pode ser manipulada como qualquer lista. Desta forma, se quisermos, por exemplo, adicionar um diretório próprio de módulo, que, digamos, se localize em ~/Programming/Python/modules, basta executar o comando abaixo:
>>> sys.path.append("/Users/zezim/Programming/Python/modules")
Listagem 2. Adicionando um diretório ao PATH de Python.
Ainda há a possibilidade de se adicionar o diretório no início do PATH, para agilizar um pouco a busca:
>>> sys.path.insert(0, "/Users/zezim/Programming/Python/modules")
Listagem 3. Adicionando um diretório no início do PATH de Python.
Todas as modificações apresentadas funcionam apenas para a sessão aberta de Python, ou seja, depois de fechado o interpretador, todas as modificações serão perdidas. Para alterar permanentemente o PATH de Python, no OS X, adicione a seguinte linha no arquivo ~/.bash_profile (se este arquivo não existir, crie-o):
export PYTHONPATH="$PYTHONPATH:/Users/zezim/Programming/Python/modules"
Então force o BASH a ler o arquivo novamente (ou reinicie-o):
$ source ~/.bash_profile
Abra o interpretador Python e o novo diretório já estará no PATH do mesmo. Para se assegurar disto, liste novamente a variável (o diretório adicionado deverá aparecer na segunda posição da lista).
Apesar de ser possível alterar o PATH do interpretador Python, esta não é uma prática recomendada, pois pode colocar em risco a segurança do sistema, desconfigurar o interpretador e mesmo fazer com que os programas criados percam em padronização. O PEP8, inclusive aconselha a utilizar os diretórios disponibilizados pelo próprio interpretador para armazenagem de módulos (no OS X: /Lybrary/Python/<version>/site-packages). Portanto, apenas altere o PATH do interpretador Python se você realmente souber o que está fazendo.
Ainda é interessante ressaltar que, ao criar um módulo, deve-se nomeá-lo de acordo com o PEP8, para facilitar futuras importações:
Ainda é interessante ressaltar que, ao criar um módulo, deve-se nomeá-lo de acordo com o PEP8, para facilitar futuras importações:
Nomes de Módulos e Pacotes
Deveriam ser curtos e com todas as letras minúsculas. Underscores podem ser usados, mas seu uso é desaconselhado. Estes procedimentos se justificam pelo fato de que nomes de módulos tendem a se tornar nomes de arquivos e alguns sistemas de arquivos têm limitação quanto à quantidade de caracteres e quanto ao uso de caracteres não-ASCII (e.g., FAT).
Quando um módulo escrito em C ou C++ tem uma versão em Python que provê um nível mais alto de abstração, costuma-se nomeá-lo com um underscore no início (e.g., _socket).
Dica retirada de http://article.gmane.org/gmane.comp.python.tutor/36916.
Leia Também
- O Estilo de Programação PEP 8 – Um ótimo estilo de programação para programadores Python.
- O Zen de Python – Um zen para boas práticas de programação.
- Eclipse com Suporte a Python no OS X – Da instalação da IDE à execução de um código Python, tudo desvendado.
Fala brow!!!!
ResponderExcluirBoa postagem kra.
Só a complementado gostaria de acrescentar duas dicas:
1ª) o caminho de pesquisa por um módulo em Python segue a seguinte hierarquia:
1. Diretório base do arquivo de nível superior.
2. Diretórios do PYTHONPATH, caso esteja configurada) - próposito da postagem
3. Diretórios onde contem as bibliotecas padrões do Python
4. Conteúdo dos arquivos .pth, caso existam.
2ª) Como você citou que a alteração dos caminhos de pesquisas do sistema podem acarretar falhas de segurança, o mais indicado seria trabalhar com arquivos com extensão .pth. Os arquivos .pth podem receber o caminho dos diretórios onde seus módulos estão presesentes. Por exemplo, podemos tratar a situação que você mesmo implantou sobre o caminho de pesquisa: /home/zezim/versaopropria.blogspot.com, poderiamos ter dentro de um dos três caminhos citados na dica 1, uma arquivo mymodulo.pth, contendo esse caminho.
Com isso ao invés de alteramos o PYTHONPATH, apenas criarimos o fluxo de pesquisa paralelo, um desvio.
Acredito que seja bastante proveitosas essas dicas.
PS. é apenas um complemento a sua postagem está bem abrangente.
Abraço.
Fala, brother!
ResponderExcluirÓtimo comentário! Como te disse, o Deitel aparentemente não aborda isso (pelo menos até o capítulo 9, onde estou). Esses arquivos .pth eu nunca ouvi falar, nem vi. Deixo, inclusive uma sugestão pra você fazer uma postagem no seu blog, ensinando a criá-los.
Contudo, numa coisa concordamos: esta alteração deve ser feita com muito cuidado, pois pode prejudicar a segurança e a portabilidade do software.
Abraço, cara!