Tengo mi propio paquete en Python y lo uso con mucha frecuencia. ¿Cuál es el directorio más elegante o convencional donde debo poner mi paquete para que se importe sin jugar con PYTHONPATH o sys.path?
¿Qué pasa con los paquetes de sitios, por ejemplo?
/usr/lib/python2.7/site-packages
.
¿Es común en Python copiar y pegar el paquete allí?
python
python-2.7
Cobry
fuente
fuente
~/foo/bar/
, agregueexport PYTHONPATH=~/foo/bar # fields separated by ":"
a su~/.bashrc
archivo). Veaman python
, esta ruta manual precede a la ruta de búsqueda predeterminada de Python. Cuidado con las colisiones de nombres.Respuestas:
Por lo general, coloco las cosas que quiero tener listas para importar en el directorio del sitio del usuario:
Para mostrar el directorio correcto para su plataforma, puede usar
python -m site --user-site
editar: aparecerá en
sys.path
una vez que lo cree:mkdir -p "`python -m site --user-site`"
fuente
python -m site --user-site
le dirá qué directorio debe crear. No aparecerásys.modules
hasta que lo haya creado.mkdir
amkdir -p
para crear los directorios intermedios. Ni siquiera tenía un~/.local
. ;-)Entonces, si eres un novato como yo y tus directorios no están muy bien organizados, quizás quieras probar este método.
Abre tu terminal de Python. Importe un módulo que sepa que funciona como numpy en mi caso y haga lo siguiente.
Import numpy
numpy.__file__
lo que resulta en
'/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site- packages/numpy/__init__.py'
El resultado
numpy.__file__
es la ubicación en la que debe colocar el archivo python con su módulo (excluyendo elnumpy/__init__.py
), por lo que para mí sería/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site- packages
Para hacer esto, vaya a su terminal y escriba
mv "location of your module" "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site- packages"
Ahora debería poder importar su módulo.
fuente
re.__file__
funcionó para mí.Esto es algo que funciona para mí (tengo que crear con frecuencia paquetes de Python que se cargan en un repositorio privado de pip). elaborando el comentario de @joran sobre la pregunta.
python setup.py sdist --format=tar
. idealmente, el paquete creado debería estar en ladist
carpeta.pip install <yourpackage>.tar
puede usar
pip install --force-reinstall
si necesita jugar más con las bibliotecas y volver a crear los paquetes dist.Descubrí que este método me funciona muy bien. Si no necesita empaquetar los módulos para el uso de otros sistemas en lugar del local, este método puede ser excesivo.
Feliz piratería.
fuente
En mi Mac, hice un
sudo find / -name "site-packages"
. Eso me dio un par de caminos como/Library/Python/2.6/site-packages
,/Library/Python/2.7/site-packages
, y/opt/X11/lib/python2.6/site-packages
.Entonces, sabía dónde colocar mis módulos si estaba usando v2.7 o v2.6.
Espero eso ayude.
fuente
Las carpetas de importación se pueden extraer agregando el siguiente código fuente:
import sys print sys.path
El ejemplo de generación automática de enlaces simbólicos sería:
ln -s \`pip show em | grep "Location"| cut -d " " -f2\` \`python -m site --user-site\`
en lugar de "em", puede usar otro paquete que "acaba de instalar pero Python no puede verlo"
a continuación, explicaré con más detalles como se solicita en el comentario.
supongamos que ha instalado el módulo de python em o pyserial con el siguiente comando (los ejemplos son para ubuntu):
y la salida es así:
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
la pregunta sería la siguiente: Python no puede ver el módulo pyserial, ¿por qué? porque la ubicación donde se instaló el módulo no es la que Python está buscando para su cuenta de usuario en particular.
solución: tenemos que crear un enlace simbólico desde la ruta donde llegó pyserial hasta la ruta donde está buscando su python.
El comando de creación de enlace simbólico sería:
en lugar de escribir la ubicación exacta, le pedimos a pip que nos diga dónde almacenó los módulos ejecutando el comando:
pip show pyserial | grep "Location"| cut -d " " -f2
en lugar de escribir la ubicación exacta, le pedimos a Python que nos diga dónde busca los módulos que se están instalando ejecutando el comando:
Ambos comandos deben escaparse con el carácter "` "(generalmente a la izquierda de su botón 1 para los teclados de EE. UU.)
como resultado, se proporcionará el siguiente comando para ln y se creará el enlace simbólico faltante:
ln -s /usr/local/lib/python2.7/dist-packages /home/<your_username>/.local/lib/python2.7/site-packages
o algo similar, dependiendo de su distribución y los valores predeterminados de python / pip.
fuente
Si está desarrollando un módulo, le recomendaría seguir esto.
import sys sys.path.append("/home/mylinux/python-packages")
Ahora, cualquier módulo que guarde
python-packages
se puede importarPython-interpreter
.fuente