Всякий раз, когда я использую sys.path.append
, новый каталог будет добавлен. Однако, как только я закрою python, список вернется к предыдущим (по умолчанию?) Значениям. Как мне постоянно добавить каталог PYTHONPATH
?
Всякий раз, когда я использую sys.path.append
, новый каталог будет добавлен. Однако, как только я закрою python, список вернется к предыдущим (по умолчанию?) Значениям. Как мне постоянно добавить каталог PYTHONPATH
?
Ответы:
Вам необходимо добавить новый каталог в переменную окружения PYTHONPATH
, отделив его двоеточием от предыдущего содержимого. В любой форме Unix вы можете сделать это в скрипте запуска, подходящем для любой используемой вами оболочки ( .profile
или любой, в зависимости от вашей любимой оболочки), с помощью команды, которая, опять же, зависит от рассматриваемой оболочки; в Windows вы можете сделать это через системный графический интерфейс для этой цели.
superuser.com
может быть, лучше задать вопрос, например, для получения более подробной информации, если вам нужны подробности о том, как обогатить переменную среды в выбранной вами платформе и оболочке, поскольку на самом деле это не вопрос программирования.
Если вы используете bash (на дистрибутиве Mac или GNU / Linux), добавьте это в свой ~/.bashrc
export PYTHONPATH="${PYTHONPATH}:/my/other/path"
~/.bashrc
затем запустите source ~/.bashrc
см. stackoverflow.com/questions/2518127/…
Вместо манипулирования 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"
python -m site --user-site
и (create the directory if it doesn't exist)
частей, чтобы заставить его работать.
somelib.pth
? Если нет, то угадайте, почему это может не сработать?
Это работает на Windows
Тогда вы сможете увидеть все модули в этих путях из ваших скриптов.
Если кто-то все еще смущен - если вы работаете на Mac, сделайте следующее:
open .bash_profile
export PYTHONPATH=$PYTHONPATH:foo/bar
export
ключ был то, что мне не хватало !!!!, голосовал, спасибо большое!
Вы можете добавить путь через файл pythonrc, который по умолчанию ~ / .pythonrc в linux. то есть.
import sys
sys.path.append('/path/to/dir')
Вы также можете установить PYTHONPATH
переменную окружения в глобальном rc-файле, например, ~/.profile
в Mac или Linux, или через Панель управления -> Система -> вкладка Дополнительно -> Переменные среды в окнах.
Чтобы дать немного больше объяснений, Python автоматически создаст свои пути поиска (как упомянуто выше и здесь ), используя site.py
сценарий (обычно расположенный в sys.prefix +, lib/python<version>/site-packages
а также lib/site-python
). Можно получить значение sys.prefix:
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
файлов конфигурации, которые содержат конкретные дополнительные пути поиска. Например, easy-install поддерживает свою коллекцию установленных пакетов, которые добавляются в системный файл, например, в Ubuntu /usr/local/lib/python2.7/dist-packages/easy-install.pth
. В типичной системе есть куча этих файлов .pth, которые могут объяснить некоторые неожиданные пути в sys.path:
python -c 'import sys; print(sys.path)'
Таким образом, можно создать файл .pth и поместить в любой из этих каталогов (в том числе Sitedir, как указано выше). ). Похоже, именно так большинство пакетов добавляются в sys.path, а не в PYTHONPATH.
Примечание: В OSX есть специальный дополнительный путь поиска, добавленный site.py для «сборок фреймворка» (но, похоже, он работает для обычного использования 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/
а затем системный питон добавит этот путь поиска.
Для меня это сработало, когда я изменил .bash_profile
файл. Просто меняется.bashrc
файла работала только до перезапуска оболочки.
Для Python 2.7 это должно выглядеть так:
export PYTHONPATH="$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python"
в конце .bash_profile
файла.
Добавление export PYTHONPATH="${PYTHONPATH}:/my/other/path"
в ~ / .bashrc может не сработать, если в PYTHONPATH
данный момент не существует (из-за :
).
export PYTHONPATH="/my/other/path1"
export PYTHONPATH="${PYTHONPATH}:/my/other/path2"
Добавление вышеупомянутого к моему ~ / .bashrc помогло мне в Ubuntu 16.04
echo PYTHONPATH
и ничего не обнаружилось! это означает, что этот PYTHONPATH не был инициализирован, поэтому я просто вставляю эту строку export PYTHONPATH=$PYTHONPATH:<PATH_TO_TF>/TensorFlow/models/research/object_detection
в мой ~/.bashrc
файл и в source ~/.bashrc
нее. Позже, когда я сделал `echo $ PYTHONPATH`, он дал мне :<PATH_TO_TF>/TensorFlow/models/research/object_detection
: Есть ли какие-нибудь предложения, если я сделал что-то не так?
export PYTHONPATH=<PATH_TO_TF>/TensorFlow/models/research/object_detection
, когда вы экспортируете PYTHONPATH в первый раз, вы должны сделать это без ${PYTHONPATH}:
детали
:<PATH_TO_TF>/TensorFlow/models/research/object_detection
удаляет 2-й export PYTHONPATH=$PYTHONPATH:/TensorFlow/models/research/slim
. какие-либо предложения по этому вопросу, как это исправить?
Добавление нового пути к PYTHONPATH выполняется вручную:
добавив путь к вашему профилю ~ / .bashrc в терминале:
vim ~/.bashrc
вставьте следующее в свой профиль
export PYTHONPATH="${PYTHONPATH}:/User/johndoe/pythonModule"
затем убедитесь, что ваш исходный профиль bashrc используется при запуске кода в терминале:
source ~/.bashrc
Надеюсь это поможет.
Я добавил постоянно в Windows Vista, Python 3.5
Система> Панель управления> Расширенные настройки системы> Расширенные (нажмите) Переменные среды> Системные переменные> (если вы не видите PYTHONPATH в столбце Переменная) (нажмите) Создать> Имя переменной: PYTHONPATH> Значение переменной:
Пожалуйста, напишите каталог в значение переменной. Это детали ответа Blue Peppers.
Сценарий ниже работает на всех платформах, так как это чистый 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))
Это обновление этой ветки, в котором есть несколько старых ответов.
Для тех, кто использует MAC-OS Catalina или более новую версию (> = 10.15), был введен новый терминал с именем zsh
(заменяющий старый bash
).
У меня были некоторые проблемы с ответами выше из-за этого изменения, и я несколько сделал обходной путь, создав файл ~/.zshrc
и вставив каталог файла в $PATH
и$PYTHONPATH
Итак, сначала я сделал:
nano ~/.zshrc
Когда редактор открылся, я вставил следующий контент:
export PATH="${PATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
export PYTHONPATH="${PYTHONPATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
сохранил его и перезапустил терминал.
ВАЖНО: путь выше указан для пути моего компьютера, вам придется адаптировать его к вашему питону.
В Python 3.6.4 вы можете сохранить sys.path в сеансах 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, иначе вы будете загромождать свой путь