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

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

Ответ 1

Вам нужно добавить новый каталог к ​​переменной окружения PYTHONPATH, разделенной двоеточием из предыдущего содержимого. В любой форме Unix вы можете сделать это при запуске script, соответствующем любой используемой оболочке (.profile или что угодно, в зависимости от вашей любимой оболочки) с помощью команды, которая, опять же, зависит от рассматриваемой оболочки; в Windows вы можете сделать это через системный графический интерфейс для этой цели.

superuser.com может быть лучше, если вы хотите узнать больше, т.е. для получения более подробной информации, если вам нужна специфика о том, как обогатить переменную среды на выбранной вами платформе и оболочке, поскольку это не вопрос программирования сам по себе.

Ответ 2

Если вы используете bash (в дистрибутиве Mac или GNU/Linux), добавьте его в свой ~/.bashrc

export PYTHONPATH="${PYTHONPATH}:/my/other/path"

Ответ 3

Вместо манипулирования 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"

Ответ 4

Это работает в Windows

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

Затем вы сможете увидеть все модули в этих путях из ваших сценариев.

Ответ 5

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

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

Вы также можете установить переменную среды PYTHONPATH в глобальном rc файле, таком как ~/.profile на mac или linux, или через Панель управления → Система → Дополнительно → Переменные среды в окнах.

Ответ 6

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

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

Ответ 7

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

Ответ 8

В linux вы можете создать символическую ссылку из своего пакета в каталог PYTHONPATH без необходимости иметь дело с переменными окружения. Что-то вроде:

ln -s /your/path /usr/lib/pymodules/python2.7/

Ответ 9

Для меня это сработало, когда я изменил файл .bash_profile. Просто изменение файла .bashrc работало только до перезапуска оболочки.

Для python 2.7 он должен выглядеть так:

export PYTHONPATH="$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python"

в конце файла .bash_profile.

Ответ 10

Добавление export PYTHONPATH="${PYTHONPATH}: /my/other/path" к ~/.bashrc не может работать, если PYTHONPATH в настоящее время не существует (из-за :).

export PYTHONPATH="/my/other/path1"
export PYTHONPATH="${PYTHONPATH}:/my/other/path2"

Добавление выше к моему ~/.bashrc помогло на Ubuntu 16.04

Ответ 11

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

Ответ 12

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

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

vim ~/.bashrc

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

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

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

source ~/.bashrc 

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

Ответ 13

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

~./bash_profile 

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

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

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

source ~./bash_profile

Ответ 14

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

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

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

Ответ 15

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

Ответ 16

Скрипт ниже работает на всех платформах, как чистый 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))