cómo configurar diferentes variables PYTHONPATH para python3 y python2 respectivamente

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 a sys.path . Los elementos no existentes nunca se agregan a sys.path , y no se verifica si el elemento hace referencia a un directorio en lugar de a un archivo. Ningún elemento se agrega a sys.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 la import (seguido de espacio o tabulador).

PYTHONPATH es algo así como un hack en lo que respecta 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 de 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 demás), 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).

Descubrí que no hay forma de modificar PYTHONPATH que sea solo para python2 o solo para python3 . Tuve que usar un archivo .pth .

Lo que tenía que hacer era:

  • Asegúrese de que el directorio esté creado en mi casa: $HOME/.local/lib/python${MAJOR_VERSION}.${MINOR_VERSION}/site-packages
  • crear un archivo .pth en ese directorio
  • prueba que tu archivo .pth es trabajo
  • hecho

Para más información sobre `.pth. la syntax de los archivos y cómo funcionan, consulte: documentos de python2 y documentos de python3 .

( .pth archivos en pocas palabras: cuando su intérprete de Python se inicie, se verá en ciertos directorios y verá el archivo .pth , abrirá esos archivos, analizará los archivos y agregará esos directorios a su sys.path (es decir, el mismo comportamiento que PYTHONPATH ) y haga que todos los módulos de Python ubicados en esos directorios estén disponibles para la importación normal.