Всякий раз, когда я использую sys.path.append
, новый каталог будет добавлен. Однако, как только я закрою python, список вернется к предыдущим (по умолчанию?) Значениям. Как я могу постоянно добавлять каталог в PYTHONPATH
?
Вам нужно добавить новый каталог к переменной окружения PYTHONPATH
, разделенной двоеточием из предыдущего содержимого. В любой форме Unix вы можете сделать это при запуске script, соответствующем любой используемой оболочке (.profile
или что угодно, в зависимости от вашей любимой оболочки) с помощью команды, которая, опять же, зависит от рассматриваемой оболочки; в Windows вы можете сделать это через системный графический интерфейс для этой цели.
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
Затем вы сможете увидеть все модули в этих путях из ваших сценариев.
Если кто-то все еще запутался - если вы на 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, или через Панель управления → Система → Дополнительно → Переменные среды в окнах.
Чтобы дать немного больше объяснений, 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 it /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/
а затем системный python добавит этот путь поиска.
Для меня это сработало, когда я изменил файл .bash_profile
. Просто изменение файла .bashrc
работало только до перезапуска оболочки.
Для python 2.7 он должен выглядеть так:
export PYTHONPATH="$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python"
в конце файла .bash_profile
.
В linux вы можете создать символическую ссылку из своего пакета в каталог PYTHONPATH без необходимости иметь дело с переменными окружения. Что-то вроде:
ln -s /your/path /usr/lib/pymodules/python2.7/
Добавление 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
и ничего не echo PYTHONPATH
! это означает, что этот PYTHONPATH не был инициализирован, поэтому я просто вставляю эту строку export PYTHONPATH=$PYTHONPATH:<PATH_TO_TF>/TensorFlow/models/research/object_detection
в моем файле ~/.bashrc
и в source ~/.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}:
часть
Чтобы добавить ответ на awesomo, вы также можете добавить эту строку в свои ~/.bash_profile
или ~/.profile
.bash_profile
если вы используете оболочку входа, в противном случае используйте .profile
В MacOS вместо указания пути к определенной библиотеке. Предоставление полного пути к корневой папке проекта в
~./bash_profile
сделал мой день, например:
export PYTHONPATH="${PYTHONPATH}:/Users/<myuser>/project_root_folder_path"
после этого сделайте:
source ~./bash_profile
Добавление нового пути к PYTHONPATH выполняется вручную:
добавив путь к вашему профилю ~/.bashrc в терминале:
vim ~/.bashrc
вставьте следующее в свой профиль
export PYTHONPATH="${PYTHONPATH}:/User/johndoe/pythonModule"
затем убедитесь, что ваш исходный профиль bashrc используется при запуске кода в терминале:
source ~/.bashrc
Надеюсь это поможет.
Скрипт ниже работает на всех платформах, как чистый Python. Он использует Pathlib Path, зарегистрированный здесь 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))
В 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, иначе вы будете загромождать свой путь
Я постоянно добавляюсь в Windows Vista, Python 3.5
Системa > Панель управления > Расширенные системные настройки > Дополнительно (нажмите) Переменные среды > Системные переменные > (если вы не видите столбец PYTHONPATH в столбце Variable) (щелкните) New > Имя переменной: PYTHONPATH > Значение переменной:
Пожалуйста, напишите каталог в переменной Variable. Это подробности ответа Blue Peppers.