Постоянно добавить каталог в PYTHONPATH?

Всякий раз, когда я использую sys.path.append, новый каталог будет добавлен. Однако, как только я закрою python, список вернется к предыдущим (по умолчанию?) Значениям. Как мне постоянно добавить каталог в PYTHONPATH?

24 ответа

Решение

Вам нужно добавить новый каталог в переменную окружения PYTHONPATH, отделенный двоеточием от предыдущего содержимого. В любой форме Unix вы можете сделать это в сценарии запуска, подходящем для любой используемой вами оболочки (.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

  1. В Windows с Python 2.7 перейдите в папку установки Python.
  2. Откройте Lib/site-packages.
  3. Добавьте в эту папку пустой файл example.pth.
  4. Добавьте требуемый путь к файлу, по одному на каждую строку.

Тогда вы сможете увидеть все модули в этих путях из ваших скриптов.

Если кто-то все еще смущен - если вы на Mac, сделайте следующее:

  1. Открыть терминал
  2. Тип open .bash_profile
  3. В появившемся текстовом файле добавьте эту строку в конце: export PYTHONPATH=$PYTHONPATH:foo/bar
  4. Сохраните файл, перезапустите Терминал, и все готово

Вы можете добавить путь через ваш файл pythonrc, который по умолчанию ~/.pythonrc в Linux. то есть.

import sys
sys.path.append('/path/to/dir')

Вы также можете установить PYTHONPATH переменная окружения, в глобальном файле rc, такая ~/.profile на Mac или Linux, или через Панель управления -> Система -> вкладка Дополнительно -> Переменные среды в Windows.

Чтобы дать немного больше объяснений, 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/ и затем системный питон добавит этот путь поиска.

В MacOS вместо указания пути к определенной библиотеке. Предоставление полного пути к корневой папке проекта в

~./bash_profile 

сделал мой день, например:

export PYTHONPATH="${PYTHONPATH}:/Users/<myuser>/project_root_folder_path"

после этого сделайте:

source ~./bash_profile

Для меня это сработало, когда я изменил .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

Это обновление этой темы, в которой есть несколько старых ответов.

Для тех, кто использует 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. Он использует путь 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))

Просто чтобы добавить ответ awesomo, вы также можете добавить эту строку в свой ~/.bash_profile или же ~/.profile

Добавление нового пути к PYTHONPATH выполняется вручную:

добавив путь к вашему профилю ~/.bashrc в терминале:

vim ~/.bashrc

вставьте следующее в свой профиль

export PYTHONPATH="${PYTHONPATH}:/User/johndoe/pythonModule"

затем убедитесь, что ваш исходный профиль bashrc используется при запуске кода в терминале:

source ~/.bashrc 

Надеюсь это поможет.

Устранение проблем с путями Python при переключении с bash на zsh

Я столкнулся с проблемами Python Path, когда переключился на zsh с bash.

Решение было простым, но я не заметил.

Пип показывал мне, что сценарии blah blahили пакет blah blah установлен в ~/.local/binкоторый не в пути.

Прочитав некоторые решения этого вопроса, я открыл свой .zshrc чтобы обнаружить, что решение уже существует.

Пришлось просто раскомментировать строку:

Взглянуть

Скриншот от 07.10.2020 13-38-17

Я добавил постоянно в Windows Vista, Python 3.5

Система> Панель управления> Расширенные настройки системы> Расширенные (нажмите) Переменные среды> Системные переменные> (если вы не видите PYTHONPATH в столбце Переменная) (щелкните) Создать> Имя переменной: PYTHONPATH > Значение переменной:

Пожалуйста, напишите каталог в значение переменной. Это детали ответа Blue Peppers.

Я нашел решение сделать это в среде анаконды здесь: https://datacomy.com/python/anaconda/add_folder_to_path/

Просто:

conda develop /your_path

Вот моя версия, вдохновленная ответом Андрея Деустяну. Это позволяет вам создать ряд дополнительных путей в каталоге пакетов сайта.

      import os

# Add paths here.  Then Run this block of code once and restart kernel. Paths should now be set.
paths_of_directories_to_add = [r'C:\GIT\project1', r'C:\GIT\project2', r'C:\GIT\project3']

# Find your site-packages directory
pathSitePckgs = os.path.join(os.path.dirname(os.__file__), 'site-packages')

# Write a .pth file in your site-packages directory
pthFile = os.path.join(pathSitePckgs,'current_machine_paths.pth')
with open(pthFile,'w') as pth_file:
    pth_file.write('\n'.join(paths_of_directories_to_add))

print(pthFile)

на Mac:

      user@terminal$ env PYTHONPATH=module_path python3
>>> import sys
>>> sys.path
['module_path', 'plus_other_python3_paths',...]

В 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, иначе вы будете загромождать свой путь

Для тех, кто (как и я) не хочет слишком углубляться в управление файлами Python (что кажется безнадежно сложным), создание файла .pth отлично работает на моем ноутбуке с Windows 11 (я использую Visual Studio Code в Windows) . Так что просто зайдите в папку с вашими пакетами сайтов виртуальной среды — там мои:

Создайте текстовый файл с расширением .pth — я назвал свой wheal.pth :

Добавьте к нему пути:

Самое лучшее в этом в VS Code то, что операторы импорта распознают этот путь (мне пришлось выйти из VS Code и вернуться), так что теперь больше набирайте # type: ignore для подавления предупреждающих сообщений!

После многократного удара о стену. Наконец решил, в моем CentOS 8в pip3был старым, что показывало ошибку при установке последних пакетов.

Теперь я загрузил исходный пакет Python, который Python-3.10.4и установил обычным способом, однако послеустановочная проверка выдала ошибки в bash.

И я не мог удалить существующий Python, потому что это нарушило бы CentOSвозможности рабочего стола.

Решение:

Для строительства

  1. ./configure// не не добавляйте --prefix=/usr, за которым нужно установить правильный уход

  2. make -j8

  3. sudo make install

Теперь, когда у вас установлено несколько Python, вы можете установить alias python=python3

И для настройки PYTHONPATH

      export PYTHONPATH="/usr/local/bin/python3.10:/usr/local/lib/python3.10/lib-dynload:/usr/local/lib/python3.10/site-packages"

Не добавляйте PYTHONHOME

Кратчайший путь между A <-> B - это прямая линия;

import sys
if not 'NEW_PATH' in sys.path:
  sys.path += ['NEW_PATH']
Другие вопросы по тегам