Cada vez que uso sys.path.append
, se agregará el nuevo directorio. Sin embargo, una vez que cierre Python, la lista volverá a los valores anteriores (¿predeterminados?). ¿Cómo agrego permanentemente un directorio PYTHONPATH
?
Cada vez que uso sys.path.append
, se agregará el nuevo directorio. Sin embargo, una vez que cierre Python, la lista volverá a los valores anteriores (¿predeterminados?). ¿Cómo agrego permanentemente un directorio PYTHONPATH
?
Respuestas:
Debe agregar su nuevo directorio a la variable de entorno PYTHONPATH
, separado por dos puntos del contenido anterior del mismo. En cualquier forma de Unix, puede hacerlo en un script de inicio apropiado para cualquier shell que esté usando ( .profile
o lo que sea, dependiendo de su shell favorito) con un comando que, nuevamente, depende del shell en cuestión; en Windows, puede hacerlo a través de la GUI del sistema para tal fin.
superuser.com
puede ser un mejor lugar para preguntar más, es decir, para obtener más detalles si necesita detalles sobre cómo enriquecer una variable de entorno en su plataforma y shell elegidos, ya que no es realmente una pregunta de programación per se.
Si está utilizando bash (en una distribución Mac o GNU / Linux), agregue esto a su ~/.bashrc
export PYTHONPATH="${PYTHONPATH}:/my/other/path"
~/.bashrc
luego ejecute source ~/.bashrc
ver stackoverflow.com/questions/2518127/…
sudo su
al comienzo de su archivo .bashrc. Esta publicación está de acuerdo conmigo. En mi sistema, al menos, ni siquiera es necesario.
En lugar de manipular PYTHONPATH
, también puede crear un archivo de configuración de ruta . Primero descubra en qué directorio Python busca esta información:
python -m site --user-site
Por alguna razón, esto no parece funcionar en Python 2.7. Allí puedes usar:
python -c 'import site; site._script()' --user-site
Luego cree un .pth
archivo en ese directorio que contenga la ruta que desea agregar (cree el directorio si no existe).
Por ejemplo:
# find directory
SITEDIR=$(python -m site --user-site)
# create if it doesn't exist
mkdir -p "$SITEDIR"
# create new .pth file with our path
echo "$HOME/foo/bar" > "$SITEDIR/somelib.pth"
python -m site --user-site
y (create the directory if it doesn't exist)
eran lo que me faltaba para que funcionara.
somelib.pth
? Si no, ¿adivina por qué esto podría no funcionar?
Esto funciona en Windows
Entonces podrá ver todos los módulos dentro de esas rutas desde sus scripts.
En caso de que alguien siga confundido, si está en una Mac, haga lo siguiente:
open .bash_profile
export PYTHONPATH=$PYTHONPATH:foo/bar
export
clave era lo que me faltaba !!!!, voté, muchas gracias!
Puede agregar la ruta a través de su archivo pythonrc, que por defecto es ~ / .pythonrc en Linux. es decir.
import sys
sys.path.append('/path/to/dir')
También puede establecer la PYTHONPATH
variable de entorno, en un archivo rc global, como ~/.profile
en mac o linux, o mediante el Panel de control -> Sistema -> pestaña Avanzado -> Variables de entorno en windows.
Para dar un poco más de explicación, Python construirá automáticamente sus rutas de búsqueda (como se mencionó anteriormente y aquí ) utilizando el site.py
script (normalmente ubicado en sys.prefix + lib/python<version>/site-packages
y también lib/site-python
). Se puede obtener el valor de sys.prefix:
python -c 'import sys; print(sys.prefix)'
El script site.py luego agrega una serie de directorios, dependiendo de la plataforma, como /usr/{lib,share}/python<version>/dist-packages
, /usr/local/lib/python<version>/dist-packages
a la ruta de búsqueda y también busca en estas rutas <package>.pth
archivos de configuración que contengan rutas de búsqueda adicionales específicas. Por ejemplo, easy-install mantiene su colección de paquetes instalados que se agregan a un archivo específico del sistema, por ejemplo, en Ubuntu /usr/local/lib/python2.7/dist-packages/easy-install.pth
. En un sistema típico, hay un montón de estos archivos .pth que pueden explicar algunas rutas inesperadas en sys.path:
python -c 'import sys; print(sys.path)'
Por lo tanto, se puede crear un archivo .pth y colocarlo en cualquiera de estos directorios (incluido el sitio como se mencionó anteriormente ). Esta parece ser la forma en que la mayoría de los paquetes se agregan a sys.path en lugar de usar PYTHONPATH.
Nota: En OSX hay una ruta de búsqueda adicional especial agregada por site.py para 'compilaciones de framework' (pero parece funcionar para el uso normal de la línea de comandos de python): /Library/Python/<version>/site-packages
(por ejemplo, para Python2.7:) /Library/Python/2.7/site-packages/
que es donde se supone que los paquetes de terceros para ser instalado (vea el archivo README en ese directorio). Por lo tanto, se puede agregar un archivo de configuración de ruta que contenga rutas de búsqueda adicionales, por ejemplo, crear un archivo llamado /Library/Python/2.7/site-packages/pip-usr-local.pth
que contiene /usr/local/lib/python2.7/site-packages/
y luego el sistema python agregará esa ruta de búsqueda.
Para mí funcionó cuando cambié el .bash_profile
archivo. Solo cambiar el .bashrc
archivo funcionó solo hasta que reinicié el shell.
Para python 2.7 debería verse así:
export PYTHONPATH="$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python"
al final del .bash_profile
archivo.
Agregar export PYTHONPATH="${PYTHONPATH}:/my/other/path"
a ~ / .bashrc podría no funcionar si PYTHONPATH
no existe actualmente (debido a :
).
export PYTHONPATH="/my/other/path1"
export PYTHONPATH="${PYTHONPATH}:/my/other/path2"
Agregar lo anterior a mi ~ / .bashrc me ayudó en Ubuntu 16.04
echo PYTHONPATH
y no apareció nada! eso significa que este PYTHONPATH no se ha inicializado, por lo que solo pego esta línea export PYTHONPATH=$PYTHONPATH:<PATH_TO_TF>/TensorFlow/models/research/object_detection
en mi ~/.bashrc
archivo y source ~/.bashrc
esta. Más tarde, cuando `echo $ PYTHONPATH` me dio :<PATH_TO_TF>/TensorFlow/models/research/object_detection
, ¿Alguna sugerencia sobre si he hecho algo mal?
export PYTHONPATH=<PATH_TO_TF>/TensorFlow/models/research/object_detection
, cuando está exportando PYTHONPATH por primera vez, debe hacerlo sin la ${PYTHONPATH}:
parte
:<PATH_TO_TF>/TensorFlow/models/research/object_detection
y elimina la segunda export PYTHONPATH=$PYTHONPATH:/TensorFlow/models/research/slim
. alguna sugerencia sobre eso, ¿cómo solucionarlo?
En MacOS, en lugar de dar ruta a una biblioteca específica. Dando la ruta completa a la carpeta del proyecto raíz en
~/.bash_profile
me alegraron el día, por ejemplo:
export PYTHONPATH="${PYTHONPATH}:/Users/<myuser>/project_root_folder_path"
después de esto hacer:
source ~/.bash_profile
El agregar una nueva ruta a PYTHONPATH se realiza manualmente al:
agregando la ruta a su perfil ~ / .bashrc, en la terminal:
vim ~/.bashrc
pegue lo siguiente en su perfil
export PYTHONPATH="${PYTHONPATH}:/User/johndoe/pythonModule"
luego, asegúrese de obtener su perfil bashrc cuando ejecute su código en la terminal:
source ~/.bashrc
Espero que esto ayude.
Agregué permanentemente en Windows Vista, Python 3.5
Sistema> Panel de control> Configuración avanzada del sistema> Avanzado (toque) Variables de entorno> Variables del sistema> (si no ve PYTHONPATH en la columna Variable) (haga clic) Nuevo> Nombre de la variable: PYTHONPATH> Valor de la variable:
Por favor, escriba el directorio en el valor Variable. Es detalles de la respuesta de Blue Peppers.
El siguiente script funciona en todas las plataformas, ya que es Python puro. Utiliza la ruta pathlib, documentada aquí https://docs.python.org/3/library/pathlib.html , para que funcione multiplataforma. Lo ejecutas una vez, reinicias el kernel y listo. Inspirado en https://medium.com/@arnaud.bertrand/modifying-python-s-search-path-with-pth-files-2a41a4143574 .
from pathlib import Path
to_add=Path(path_of_directory_to_add)
from sys import path
if str(to_add) not in path:
minLen=999999
for index,directory in enumerate(path):
if 'site-packages' in directory and len(directory)<=minLen:
minLen=len(directory)
stpi=index
pathSitePckgs=Path(path[stpi])
with open(str(pathSitePckgs/'current_machine_paths.pth'),'w') as pth_file:
pth_file.write(str(to_add))
Esta es una actualización de este hilo que tiene algunas respuestas antiguas.
Para aquellos que usan MAC-OS Catalina o algunos más nuevos (> = 10.15), se introdujo un nuevo Terminal llamado zsh
(un sustituto del anterior bash
).
He tenido algunos problemas con las respuestas anteriores debido a este cambio, y yo hice un poco de una solución mediante la creación del archivo ~/.zshrc
y pegar el directorio de archivos a la $PATH
e$PYTHONPATH
Entonces, primero hice:
nano ~/.zshrc
Cuando se abrió el editor, pegué el siguiente contenido:
export PATH="${PATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
export PYTHONPATH="${PYTHONPATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
lo guardó y reinició la terminal.
IMPORTANTE: La ruta de arriba está configurada para la ruta de mi computadora, tendrías que adaptarla a tu python.
En Python 3.6.4 puede persistir sys.path en sesiones de Python como esta:
import sys
import os
print(str(sys.path))
dir_path = os.path.dirname(os.path.realpath(__file__))
print(f"current working dir: {dir_path}")
root_dir = dir_path.replace("/util", '', 1)
print(f"root dir: {root_dir}")
sys.path.insert(0, root_dir)
print(str(sys.path))
Te sugiero encarecidamente que uses virtualenv y virtualenvwrapper, de lo contrario, abarrotarás tu camino