Eu tenho meu próprio pacote em python e estou usando-o com frequência. qual o diretório mais elegante ou convencional onde devo colocar meu pacote para que seja importado sem brincar com PYTHONPATH ou sys.path?
E os pacotes de sites, por exemplo?
/usr/lib/python2.7/site-packages
.
É comum em python copiar e colar o pacote lá?
python
python-2.7
Cobry
fonte
fonte
~/foo/bar/
, adicionarexport PYTHONPATH=~/foo/bar # fields separated by ":"
ao seu~/.bashrc
arquivo). Vejaman python
, este caminho manual precede o caminho de pesquisa padrão do Python. Cuidado com as colisões de nomes.Respostas:
Normalmente coloco o que quero ter pronto para importar no diretório do site do usuário:
Para mostrar o diretório certo para sua plataforma, você pode usar
python -m site --user-site
editar: ele aparecerá
sys.path
assim que você criá-lo:mkdir -p "`python -m site --user-site`"
fonte
python -m site --user-site
lhe dirá qual diretório você deve criar. Ele não aparecerásys.modules
até que você realmente o tenha criado.mkdir
paramkdir -p
para criar os diretórios intermediários. Eu nem tinha um~/.local
. ;-)Portanto, se você é um novato como eu e seus diretórios não são muito bem organizados, tente este método.
Abra seu terminal Python. Importe um módulo que você sabe que funciona como numpy no meu caso e faça o seguinte.
Import numpy
numpy.__file__
o que resulta em
'/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site- packages/numpy/__init__.py'
O resultado
numpy.__file__
é a localização em que você deve colocar o arquivo python com seu módulo (excluindo onumpy/__init__.py
), então para mim isso seria/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site- packages
Para fazer isso, basta ir ao seu terminal e digitar
mv "location of your module" "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site- packages"
Agora você deve ser capaz de importar seu módulo.
fonte
re.__file__
funcionou para mim.Isso é algo que funciona para mim (tenho que frequentemente criar pacotes Python que são carregados para um repositório pip privado). elaborando o comentário de @joran sobre a questão.
python setup.py sdist --format=tar
. o pacote criado deve estar idealmente nadist
pasta.pip install <yourpackage>.tar
você pode usar
pip install --force-reinstall
se precisar brincar mais com as bibliotecas e recriar os pacotes dist.Descobri que esse método funciona muito bem para mim. Se você não precisa empacotar os módulos para uso de outros sistemas em vez de apenas seu local, este método pode ser um exagero
Feliz hacking.
fonte
No meu Mac, fiz um
sudo find / -name "site-packages"
. Isso deu-me alguns caminhos como/Library/Python/2.6/site-packages
,/Library/Python/2.7/site-packages
, e/opt/X11/lib/python2.6/site-packages
.Então, eu sabia onde colocar meus módulos se estivesse usando a v2.7 ou v2.6.
Espero que ajude.
fonte
As pastas de importação podem ser extraídas adicionando o seguinte código-fonte:
import sys print sys.path
exemplo de geração automática de link simbólico seria:
ln -s \`pip show em | grep "Location"| cut -d " " -f2\` \`python -m site --user-site\`
em vez de "em" você pode usar outro pacote que "acabou de instalar, mas o python não consegue ver"
abaixo vou explicar em mais detalhes conforme solicitado no comentário.
suponha que você instalou o módulo python em ou pyserial com o seguinte comando (os exemplos são para ubuntu):
e a saída é assim:
Collecting pyserial Downloading pyserial-3.3-py2.py3-none-any.whl (189kB) 100% |████████████████████████████████| 194kB 2.3MB/s Installing collected packages: pyserial Successfully installed pyserial-3.3
a questão seria a seguinte - python não consegue ver o módulo pyserial, por quê? porque o local onde o módulo foi instalado não é aquele que o python está procurando para sua conta de usuário específica.
solução - temos que criar um link simbólico a partir do caminho onde o pyserial chegou para o caminho que o seu python está procurando.
O comando de criação de link simbólico seria:
em vez de digitar a localização exata, pedimos ao pip que nos diga onde armazenou os módulos, executando o comando:
pip show pyserial | grep "Location"| cut -d " " -f2
em vez de digitar o local exato, pedimos ao python que nos diga onde ele procura os módulos sendo instalados executando o comando:
ambos os comandos devem ser escapados com o caractere "` "(geralmente à esquerda do botão 1 para os teclados dos EUA)
no resultado, o seguinte comando será fornecido para ln e o link simbólico ausente será criado:
ln -s /usr/local/lib/python2.7/dist-packages /home/<your_username>/.local/lib/python2.7/site-packages
ou algo semelhante, dependendo de sua distro e padrões de python / pip.
fonte
Se você estiver desenvolvendo um módulo, eu recomendaria seguir isso.
import sys sys.path.append("/home/mylinux/python-packages")
Agora, qualquer módulo que você mantém
python-packages
é importável porPython-interpreter
.fonte