2010-08-04 20 views

Respuesta

93

Es necesario añadir el nuevo directorio para la variable de entorno PYTHONPATH, separados por dos puntos de contenidos anteriores de los mismos. En cualquier forma de Unix, puede hacer eso 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, de nuevo, depende del shell en cuestión; en Windows, puede hacerlo a través de la GUI del sistema para este fin.

superuser.com puede ser un mejor lugar para pedir más, es decir, para obtener más detalles si necesita detalles sobre cómo enriquecer una variable de entorno en la plataforma y shell elegidos, ya que no es realmente una cuestión de programación per se.

+7

Errata: separador en windows sería un punto y coma. Si necesita anular las rutas del sistema en Windows, la configuración a través de la GUI como variable de entorno de usuario puede no ser suficiente, ya que las variables de usuario se añaden a las variables del sistema. En estos casos, deberá recurrir a un script de inicio que realice los ajustes necesarios. –

+0

@Nathan, tx para el recordatorio en punto y coma, pero (si es un administrador por supuesto) usted puede configurar ** system ** env.vars en Windows (además, el OP no está preguntando cómo ** anular ** la ruta, solo cómo ** anexar ** a ella, entonces, un usuario env .var también estará bien para eso! -). –

+0

desafortunadamente no soy administrador en mi PC de trabajo, así que tengo que recurrir a tales medidas. :( –

309

Si está utilizando bash (en un Mac o GNU distro/Linux), agregar esto a su ~/.bashrc

export PYTHONPATH="${PYTHONPATH}:/my/other/path" 
+18

Esto funcionó perfectamente para mí, pero asegúrese de que el directorio que señala tiene en el archivo __init__.py más arriba en su di estructura de la rectoría Esto no estaba perfectamente claro para mí al principio. Por ejemplo, intenté ** exportar PYTHONPATH = $ PYTHONPATH:/Users/joey/repos ** pero no funcionó porque mi directorio de repos no tenía \ __ init__.py. Bajando un directorio más: **/Users/joey/repos/specificRepo ** hizo el truco. ¡Ahora Python puede atravesar cualquier directorio hacia abajo conectado al directorio específicoRepo que contiene un __init__.py! –

+2

esto funcionó para mí, pero ¿podría explicarnos dónde se encuentra esta variable PYTHONPATH? y ¿cómo sabe "exportar PYTHONPATH" para localizar ese archivo exacto? – appleLover

+31

recuerda después de editar '' ~/.bashrc'' luego ejecuta '' source ~/.bashrc'' ver http://stackoverflow.com/questions/2518127/how-do-i-reload-bashrc-without-logging -out-and-back-in –

17

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 variable de entorno PYTHONPATH, en un fichero rc mundial, tales ~/.profile en Mac o Linux, o a través del Panel de control -> Sistema -> pestaña Opciones avanzadas -> Variables de entorno en Windows.

+31

sys.path.append ('/ path/to/dir ') no agrega permanentemente la entrada. – jeremyjjbrown

5

Sólo para añadir en la respuesta de awesomo, también se puede añadir esa línea en su ~/.bash_profile o ~/.profile

+0

Agregar a '.bash_profile' si usa el shell de inicio de sesión, de lo contrario use' .profile' – smac89

64

En lugar de manipular PYTHONPATH también se puede crear un path configuration file. En primer lugar averiguar en qué búsquedas de directorio de Python para obtener esta información:

python -m site --user-site 

Por alguna razón esto no parece funcionar en Python 2.7. Allí se puede utilizar:

python -c 'import site; site._script()' --user-site 

A continuación, cree un archivo .pth en ese directorio que contiene la ruta que desea agregar (crear 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" 
+0

Lo intenté usando Python 2.6 y no parece funcionar para mí –

+3

Acabo de vincular este directorio a mi propio directorio y almacén de biblioteca todos mis guiones allí. Funcionó bien. – firesofmay

+0

¡Se resolvió intentarlo de nuevo después de encontrar este tema nuevamente y se las arregló para hacerlo funcionar como antes! Disculpas vivas y arrepentidas :) –

19

En caso de que alguien está siendo confundido - si usted está en un Mac, haga lo siguiente:

  1. abre una Terminal
  2. Tipo open .bash_profile
  3. En el archivo de texto que aparece, agregue esta línea al final: export PYTHONPATH=$PYTHONPATH:foo/bar
  4. guardar el archivo, reinicie el terminal, y ya está
8

En Linux se puede crear un enlace simbólico desde el paquete a un directorio del PYTHONPATH sin tener que lidiar con las variables de entorno.Algo como:

ln -s /your/path /usr/lib/pymodules/python2.7/ 
8

Para mí funcionó cuando cambié el archivo .bash_profile. Solo cambiando el archivo .bashrc funcionó solo hasta que reinicié el shell.

para Python 2.7 que debe ser similar:

export PYTHONPATH="$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python" 

al final del archivo .bash_profile.

20

Esto funciona en Windows

  1. En Windows, con Python 2.7 vaya a la carpeta de instalación de Python.
  2. Abra Lib/site-packages.
  3. Agregue un archivo example.pth vacío a esta carpeta.
  4. Agregue la ruta requerida al archivo, una por cada línea.

Luego podrá ver todos los módulos dentro de esas rutas desde sus scripts.

+2

IMO, esta es la mejor solución, ya que no depende de la elección de la carcasa o el entorno de trabajo. También funciona en Linux, donde la ruta predeterminada de Python es "/usr/local/lib/pythonX.Y/site-packages". Si eso no funciona, intente poner su archivo .pth en el directorio dist-packages. – matus

6

para dar un poco más explicación, Python construirá automáticamente sus trayectorias de búsqueda (como se ha mencionado above y here) usando la secuencia de comandos site.py (típicamente situado en sys.prefix + lib/python<version>/site-packages así como lib/site-python). Se puede obtener el valor de sys.prefix:

python -c 'import sys; print(sys.prefix)' 

El guión site.py continuación, añade 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 búsquedas estos caminos para <package>.pth archivos de configuración que contienen rutas de búsqueda adicionales específicas. Por ejemplo, fácil de instalar mantiene su colección de paquetes instalados que se agregan a un archivo específico del sistema, por ejemplo, en Ubuntu es /usr/local/lib/python2.7/dist-packages/easy-install.pth. En un sistema típico, hay un montón de estos archivos .pth alrededor del cual pueden explicar algunos caminos inesperados en sys.path:

python -c 'import sys; print(sys.path)' 

Así que uno puede crear un archivo de .pth y poner en cualquiera de estos directorios (incluyendo el sitedir como se menciona above). 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 OS X hay una ruta de búsqueda especial adicional añadido por site.py para 'marco se basa' (pero parece que funciona para el uso normal de 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 se deben instalar paquetes de terceros (vea el archivo README en ese directorio). Entonces, uno puede agregar un archivo de configuración de ruta que contenga rutas de búsqueda adicionales, p. cree 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.

+2

Esta es la mejor respuesta de todas las soluciones que encontré. Por favor, levántate. –

0

He agregado permanentemente en Windows Vista, Python 3.5

Sistema> Panel de control> Configuración avanzada del sistema> Avanzado (tap) Variables de entorno> Variables del sistema> (si no ve PYTHONPATH en la columna Variable) (clic) Nuevo> Nombre de la variable: PYTHONPATH> Variable:

Escriba el directorio en el valor Variable. Es detalles de la respuesta de Blue Peppers.

0

Agregar export PYTHONPATH="${PYTHONPATH}:/my/other/path" al ~/.bashrc podría no funcionar si PYTHONPATH no existe actualmente (debido a :).

export PYTHONPATH="/my/other/path1" 
export PYTHONPATH="${PYTHONPATH}:/my/other/path2" 

Adición de lo anterior a mi ~/.bashrc hizo el truco para mí en Ubuntu 16.04

0

En Python 3.6.4 puede persistir sys.path a través de sesiones de pitón de esta manera:

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)) 

Le sugiero que use virtualenv y virtualenvwrapper, de lo contrario va a saturar su ruta

Cuestiones relacionadas