Всякий раз, когда я использую 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_profileexport PYTHONPATH=$PYTHONPATH:foo/barexportключ был то, что мне не хватало !!!!, голосовал, спасибо большое!
Вы можете добавить путь через файл 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, иначе вы будете загромождать свой путь