Постоянное добавление каталога в PYTHONPATH
всякий раз, когда я использую sys.path.append
, будет добавлен новый каталог. Однако, как только я закрою python, список вернется к предыдущему (по умолчанию?) значения. Как постоянно добавлять каталог в PYTHONPATH?
14 ответов
вам нужно добавить новый каталог в переменную окружения PYTHONPATH
, отделенный двоеточием от его предыдущего содержимого. В любой форме Unix вы можете сделать это в сценарии запуска, соответствующем любой используемой вами оболочке (.profile
или любой другой, в зависимости от вашей любимой оболочки) с командой, которая, опять же, зависит от оболочки; в Windows, вы можете сделать это через GUI система для этой цели.
superuser.com
может быть лучшим местом, чтобы спросить дальше, т. е. подробнее, Если вам нужна конкретика о том, как обогатить переменную среды в выбранной вами платформе и оболочке, так как это не вопрос программирования как таковой.
Если вы используете bash (на Mac или дистрибутиве GNU/Linux), добавьте это в свой ~/.bashrc
export PYTHONPATH="${PYTHONPATH}:/my/other/path"
вместо манипулирования PYTHONPATH
вы также можете создать настройки путь к файлу. Сначала узнайте, в каком каталоге Python ищет эту информацию:
python -m site --user-site
по какой-то причине это не работает в Python 2.7. Там вы можете использовать:
python -c 'import site; site._script()' --user-site
затем создать .pth
файл в этом каталоге, содержащий путь, который вы хотите добавить (создайте каталог, если он не существует).
например:
# 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"
это работает на Windows
- В Windows с Python 2.7 перейдите в папку установки Python.
- открыть Lib / site-packages.
- добавить пример.PTH пустой файл в эту папку.
- добавить путь к файлу, по одному в каждой строке.
тогда вы сможете увидеть все модули в этих путях из ваших скриптов.
Если кто-то все еще смущен - если вы находитесь на Mac, сделайте следующее:
- открыть терминал
- тип
open .bash_profile
- в появившемся текстовом файле добавьте эту строку в конце:
export PYTHONPATH=$PYTHONPATH:foo/bar
- сохраните файл, перезапустите терминал, и все готово
вы можете добавить путь через файл pythonrc, который по умолчанию равен~/.pythonrc на linux. то есть.
import sys
sys.path.append('/path/to/dir')
вы также можете установить PYTHONPATH
переменная окружения, в глобальном rc-файле, такая ~/.profile
на mac или linux, или через Панель управления - > Система - > вкладка Дополнительно - > Переменные среды в windows.
чтобы дать немного больше объяснений, Python автоматически построит свои пути поиска (Как упоминалось выше и здесь) С помощью site.py
скрипт (обычно находится в sys.префикс + lib/python<version>/site-packages
а также lib/site-python
). Можно получить значение sys.приставка:
python -c 'import sys; print(sys.prefix)'
site.py затем скрипт добавляет ряд каталогов, зависящих от платформы, таких как /usr/{lib,share}/python<version>/dist-packages
, /usr/local/lib/python<version>/dist-packages
на пути поиска и поиски эти пути <package>.pth
файлы конфигурации, которые содержат определенные дополнительные пути поиска. Например простая установка поддерживает свою коллекцию установленных пакетов, которые добавляются в системный файл e.g на Ubuntu это /usr/local/lib/python2.7/dist-packages/easy-install.pth
. В типичной системе таких много .PTH-файлы, вокруг которых можно объяснить некоторые неожиданные пути в sys.путь:
python -c 'import sys; print(sys.path)'
таким образом, можно создать .PTH файл и поместить в любой из этих каталогов (включая sitedir, как упоминалось выше). Кажется, это способ добавления большинства пакетов в sys.путь в отличие от использования PYTHONPATH.
Примечание: на OSX есть специальный дополнительный путь поиска, добавленный site.py для "framework builds" (но, похоже, работает для обычного использования командной строки python): /Library/Python/<version>/site-packages
(например, для python2.7: /Library/Python/2.7/site-packages/
), где должны быть установлены пакеты сторонних производителей (см. README в этом каталоге). Таким образом, можно добавить файл конфигурации пути, содержащий дополнительные пути поиска, например, создайте файл с именем /Library/Python/2.7/site-packages/pip-usr-local.pth
, которая содержит /usr/local/lib/python2.7/site-packages/
и затем системный python добавит этот путь поиска.
в linux вы можете создать символическую ссылку из своего пакета в каталог PYTHONPATH без необходимости иметь дело с переменными среды. Что-то вроде:
ln -s /your/path /usr/lib/pymodules/python2.7/
для меня это сработало, когда я изменил . Просто меняюсь .bashrc
файл работал только до перезапуска оболочки.
для Python 2.7 это должно выглядеть так:
export PYTHONPATH="$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python"
в конце .
чтобы добавить ответ awesomo, вы также можете добавить эту строку в свой ~/.bash_profile
или ~/.profile
добавлять export PYTHONPATH="${PYTHONPATH}:/my/other/path"
в ~/.bashrc может не работать, если PYTHONPATH
в настоящее время не существует (из-за :
).
export PYTHONPATH="/my/other/path1"
export PYTHONPATH="${PYTHONPATH}:/my/other/path2"
добавление вышеизложенного в my~/.bashrc сделал трюк для меня на Ubuntu 16.04
Я добавил постоянно в Windows Vista, в языке Python 3.5
система > Панель управления > расширенные системные Настройки > Расширенные Переменные среды > системные переменные > (если вы не видите PYTHONPATH в столбце переменных) (нажмите) Создать > имя переменной: PYTHONPATH > значение переменной:
пожалуйста, напишите каталог в значении переменной. Это детали ответа Blue Peppers.
в Python 3.6.4 вы можете сохранить sys.путь через сеансы python, как это:
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))
Я настоятельно рекомендую вам использовать virtualenv и virtualenvwrapper, иначе вы загромождаете свой путь
скрипт ниже работает на всех платформах, так как это чистый Python. Он использует путь pathlib, задокументированный здесь https://docs.python.org/3/library/pathlib.html, сделать его работать кросс-платформенный. Вы запускаете его один раз, перезапускаете ядро и все. Вдохновленный 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))