Щоразу, коли я використовую 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 / ...
sudo su
на початку свій файл .bashrc. Ця публікація погоджується зі мною. Принаймні, в моїй системі це навіть не потрібно.
Замість маніпулювання 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, або через панель керування -> System -> вкладка Advanced -> Змінні середовища у 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
файлах конфігурації, які містять конкретні додаткові шляхи пошуку. Наприклад, проста установка підтримує свою колекцію встановлених пакетів, які додаються до конкретного системного файлу, наприклад, на 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
. будь-які пропозиції щодо цього, як це виправити?
На 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"
то переконайтеся, що ви коли-небудь запускаєте свій код у терміналі:
source ~/.bashrc
Сподіваюсь, це допомагає.
Я додав постійно в Windows Vista, Python 3.5
Система> Панель управління> Розширені налаштування системи> Розширені (торкніться) Змінні середовища> Системні змінні> (якщо ви не бачите PYTHONPATH у стовпці "Змінна") (натисніть) Нове> Назва змінної: PYTHONPATH> Значення змінної:
Будь ласка, напишіть каталог у значенні Змінна. Це деталі відповіді Блакитного перцю.
Сценарій нижче працює на всіх платформах, оскільки це чистий 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, інакше ви забиєте свій шлях