tutorial - cómo configurar diferentes variables PYTHONPATH para python3 y python2 respectivamente
the django project (2)
Quiero agregar una ruta de biblioteca específica solo a python2. Después de agregar export PYTHONPATH="/path/to/lib/"
a mi .bashrc
, sin embargo, al ejecutar python3 se produce el error: ¡PYTHONPATH apunta a un directorio de paquetes de sitios para Python 2.x pero está ejecutando Python 3.x!
Creo que se debe a que python2 y python3 comparten la variable común PYTHONPATH
.
Entonces, ¿puedo establecer diferentes variables PYTHONPATH
respectivamente para python2 y python3? Si no, ¿cómo puedo agregar una ruta de biblioteca exclusivamente a una versión particular de python?
Puede crear un archivo de configuración mymodule.pth
bajo lib/site-packages
(en Windows) o lib/pythonX.Y/site-packages
(en Unix y Macintosh), y luego agregar una línea que contenga el directorio para agregar a la ruta de python.
De docs.python2 y docs.python3 :
Un archivo de configuración de ruta es un archivo cuyo nombre tiene el formato
name.pth
y existe en uno de los cuatro directorios mencionados anteriormente; su contenido son elementos adicionales (uno por línea) que se agregarán asys.path
. Los elementos no existentes nunca se agregan asys.path
, y no se verifica si el elemento hace referencia a un directorio en lugar de a un archivo. Ningún elemento se agrega asys.path
más de una vez. Las líneas en blanco y las líneas que comienzan con # se omiten. Se ejecutan las líneas que comienzan con laimport
(seguido de espacio o tabulador).
PYTHONPATH
es algo así como un hack en lo que se refiere a la gestión de paquetes. Una solución "bonita" sería empaquetar tu biblioteca e instalarla .
Esto podría sonar más complicado de lo que es, así que déjame mostrarte cómo funciona.
Supongamos que su "paquete" tiene un único archivo llamado wow.py
y lo mantiene en /home/user/mylib/wow.py
.
Cree el archivo /home/user/mylib/setup.py
con el siguiente contenido:
from setuptools import setup
setup(name="WowPackage",
packages=["."],
)
Eso es todo, ahora puede "instalar correctamente" su paquete en la distribución Python de su elección sin la necesidad de preocuparse por PYTHONPATH
. En lo que respecta a la "instalación adecuada", tiene al menos tres opciones:
"Realmente correcto". Copiará su código a su directorio de paquetes de sitios de python:
$ python setup.py install
"Desarrollo". Solo agregará un enlace desde los paquetes de sitio de python a
/home/user/mylib
. Esto significa que los cambios de código en su directorio tendrán efecto.$ python setup.py develop
"Usuario". Si no desea escribir en los directorios del sistema, puede instalar el paquete (ya sea "correctamente" o "en modo de desarrollo") en el directorio
/home/user/.local
, donde Python también los encontrará por su cuenta. Para eso, simplemente agregue--user
al comando.$ python setup.py install --user $ python setup.py develop --user
Para eliminar un paquete instalado en modo de desarrollo, haga
$ python setup.py develop -u
o
$ python setup.py develop -u --user
Para eliminar un paquete instalado "correctamente", haga
$ pip uninstall WowPackage
Si su paquete es más interesante que un solo archivo (por ejemplo, tiene subdirectorios y similares), simplemente enumere los parámetros en el parámetro de packages
de la función de setup
(tendrá que listar todo de forma recursiva, por lo tanto, utilizará una función auxiliar para bibliotecas más grandes ). Una vez que lo aprendas, asegúrate de leer también un manual más detallado .
Al final, vaya y contribuya con su paquete a PyPI; es tan simple como llamar a la python setup.py sdist register upload
(aunque necesitará un nombre de usuario de PyPI).