¿Cómo configura su pythonpath en un virtualenv ya creado?

106

¿Qué archivo edito y cómo? Creé un entorno virtual.

TIMEX
fuente
compruebe que apunte a los directorios correctos. Si aún no tiene uno, haga clic en el botón Nuevo y créelo.
11
Utilice el comando add2virtualenv .
s29
5
add2virtualenv es un virtualenvwrappercomando. No es parte de virtualenv.
kojiro

Respuestas:

124

EDITAR # 2

La respuesta correcta es la de @arogachev .


Si desea cambiar el PYTHONPATHusado en un virtualenv, puede agregar la siguiente línea al bin/activatearchivo de su virtualenv :

export PYTHONPATH="/the/path/you/want"

De esta manera, el nuevo PYTHONPATHse establecerá cada vez que use este virtualenv.

EDITAR: (para responder al comentario de @ RamRachum)

Para restaurarlo a su valor original deactivate, puede agregar

export OLD_PYTHONPATH="$PYTHONPATH"

antes de la línea mencionada anteriormente y agregue la siguiente línea a su bin/postdeactivatesecuencia de comandos.

export PYTHONPATH="$OLD_PYTHONPATH"
mdeous
fuente
1
¿También se quitará deactivate?
Ram Rachum
1
Entonces, ¿esto significa que un entorno virtual recién creado tiene la PYTHONPATHruta predeterminada (la global) en lugar de la ruta local virtualenv?
ducin
6
Esto funcionó muy bien para mí, no estoy usando virtualenvwrapper. La única nota es que no tenía dicho script bin / postdeactivate, sino que activar tenía una función de desactivación. Por lo tanto, la línea de código debe colocarse allí, teniendo cuidado de envolverla en una instrucción if como el resto de las operaciones de la función.
Niccolò
2
Parece extraño que virtualenv no haga esto de forma predeterminada.
Seth
2
¡La edición n. ° 2 es una mentira! :) La respuesta correcta es la de @ arjen-p-de-vries
Berriel
73

El comentario de @ s29 debería ser una respuesta:

Una forma de agregar un directorio al entorno virtual es instalar virtualenvwrapper (que es útil para muchas cosas) y luego hacer

mkvirtualenv myenv
workon myenv
add2virtualenv . #for current directory
add2virtualenv ~/my/path

Si desea eliminar esta ruta, edite el archivo myenvhomedir/lib/python2.7/site-packages/_virtualenv_path_extensions.pth

La documentación sobre virtualenvwrapper se puede encontrar en http://virtualenvwrapper.readthedocs.org/en/latest/

La documentación específica sobre esta función se puede encontrar en http://virtualenvwrapper.readthedocs.org/en/latest/command_ref.html?highlight=add2virtualenv

tjb
fuente
6
para eliminar:add2virtualenv -d
thecheech
1
acabo de vincular esta respuesta en la mía, ya que es mucho mejor
mdeous
27

Puede crear un .ptharchivo que contenga el directorio a buscar y colocarlo en el site-packagesdirectorio. P.ej:

cd $(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
echo /some/library/path > some-library.pth

El efecto es el mismo que añadir /some/library/patha sys.path, y permanecer local para la virtualenvinstalación.

Arjen P. De Vries
fuente
7
Realmente me gusta este enfoque; no es tan voluble como agregar líneas para activar / desactivar y no requiere usar virtualenvwrapper. Si prefiere no invocar Python para encontrar el directorio de paquetes de sitio, está en la ruta bastante predecible $VIRTUALENV_ROOT/lib/pythonX.Y/site-packages. Documentos sobre archivos .pth: docs.python.org/3.6/library/site.html
Alec
2
No quería escribir una ruta absoluta, porque mis espacios de trabajo se mueven por mi sistema de archivos. Y la ruta de mi proyecto tiene espacios. Entonces, escribí el comando ligeramente modificado: pushd "$(venv/bin/python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")" ...path/to/project/venv/lib/python3.7/site-packages ...path/to/project echo ../../../../src > my_project.pth popdLuego desactivé mi virtualenv y lo reactivé. Ahora podía ejecutar el código del proyecto que requería saber dónde estaba el directorio de mi proyecto.
Jim DeLaHunt
4
Esta es la respuesta correcta. La modificación del script proporcionado por el proveedor ( /bin/activate) es una mala práctica y la instalación de herramientas de terceros es inferior a utilizar una forma integrada para lograr lo mismo.
Rojo
2
  1. Inicializa tu virtualenv
cd venv

source bin/activate
  1. Simplemente configure o cambie su ruta de Python ingresando el siguiente comando:
export PYTHONPATH='/home/django/srmvenv/lib/python3.4'
  1. para verificar la ruta de Python ingrese en Python:
   python

      \>\> import sys

      \>\> sys.path
Siyaram Malav
fuente
1

Modifiqué mi script de activación para obtener el archivo .virtualenvrc, si existe en el directorio actual, y para guardar / restaurar PYTHONPATHal activar / desactivar.

Puede encontrar el activatescript parcheado aquí. . Es un reemplazo directo del script de activación creado por virtualenv 1.11.6.

Luego agregué algo como esto a mi .virtualenvrc:

export PYTHONPATH="${PYTHONPATH:+$PYTHONPATH:}/some/library/path"
André Laszlo
fuente
-20

Ya está respondido aquí -> ¿Mi entorno virtual (python) está causando que mi PYTHONPATH se rompa?

UNIX / LINUX

Agregue "export PYTHONPATH = / usr / local / lib / python2.0" a este archivo ~ / .bashrc y obtenga la fuente escribiendo "source ~ / .bashrc" O ". ~ / .Bashrc".

WINDOWS XP

1) Vaya al panel de control 2) Haga doble clic en Sistema 3) Vaya a la pestaña Avanzado 4) Haga clic en Variables de entorno

En la ventana Variables del sistema, verifique si tiene una variable llamada PYTHONPATH. Si ya tiene uno, verifique que apunte a los directorios correctos. Si aún no tiene uno, haga clic en el botón Nuevo y créelo.

CÓDIGO PYTHON

Alternativamente, también puede hacer debajo de su código: -

import sys
sys.path.append("/home/me/mypy") 
Ravikiran
fuente
4
-1: Esto se dirige al PYTHONPATH del usuario, no al PYTHONPATH del virtualenv.
twneale