Змінна середовища PYTHONPATH


19

У мене це є ~/.profile:

export PYTHONPATH=/home/dev/python-files

У python-filesкаталозі у мене є кілька клонованих проектів з git-hub (flask, curveship та py-vgdl).

Щоразу, коли я намагаюся запустити будь-який із прикладів у цих проектах, я отримую помилки, подібні до наступного:

$ python ~/python-files/py-vgdl/examples/gridphysics/frogs.py 
Traceback (most recent call last):
    File "/home/dev/python-files/py-vgdl/examples/gridphysics/frogs.py", line 67, in <module>
        from vgdl.core import VGDLParser
ImportError: No module named vgdl.core

Мені здається, що я не повинен отримувати цю помилку, оскільки у мене встановлена PYTHONPATHекологічна змінна?

Запуск інтерактивного інтерпретатора python:

>>> import os
>>> os.environ["PYTHONPATH"]
'/home/dev/python-files'

Відповіді:


35

Спробуйте приєднатись до PYTHONPATH, а не перезаписувати його повністю.

export PYTHONPATH=$PYTHONPATH:/home/dev/python-files

Список літератури:

Відповідно до документації Python на PYTHONPATH

Розширити шлях пошуку за файлами модулів за замовчуванням. [...]

Шлях пошуку за замовчуванням залежить від встановлення, але зазвичай починається з prefix/lib/pythonversion(див. PYTHONHOMEВище). Це завжди додається PYTHONPATH.

що означає, що деякі значення існують у, PYTHONPATHа шлях пошуку за замовчуванням також лише додається.

Крім того, ця публікація в блозі ( посилання Archive.org ) також чітко пояснює, чому потрібно додавати, PYTHONPATHа не перезаписувати його. Прокручування вниз до розділу - Особливі випадки та вивчення шляху пошуку пояснює це чітко (на жаль, немає відносної URL-адреси до цього посилання, тому вам доведеться прокручувати). Хоча користувач наводить приклади на mac, вони дуже стосуються будь-якої платформи


1
@Garrett Спасибі :) Оновлено посилання Archive.org.
Нітін Венкатеш

+1 для посилання архів / stereoplex. Він відповідає на стільки питань, які мають бути на головній сторінці офіційних документів Python!
Малик А. Румі

5

Ви також можете зробити наступне:

export PYTHONPATH=$(pwd) **or** export PYTHONPATH=${PWD}

pwd - це поточний робочий каталог.


Остерігайтеся, це замінить ваш PYTHONPATH в процесі! Якщо ви хочете додати pwd до свого PYTHONPATH:export PYTHONPATH=$PYTHONPATH:$(pwd)
jackw11111

4

PYTHONPATHмає вказувати на те, де знаходяться ваші пакети та модулі Python, а не там, де перебувають ваші замовлення. Іншими словами, якщо ви робите, ls "$PYTHONPATH"ви повинні побачити *.pyфайли ( модулі Python ) та каталоги, що містять __init__.pyфайли ( пакети Python ).

Отже, якщо ви хочете мати можливість import vgdl, ви PYTHONPATHповинні виглядати так:

PYTHONPATH=/home/dev/python-files/py-vgdl

тому що vgdl пакет знаходиться всередині py-vgdl, а не всередині python-files.

Щоб додати й інші шляхи, ви можете :розділити їх:

PYTHONPATH="/home/dev/python-files/py-vgdl:/home/dev/python-files/something:$PYTHONPATH"

Це дійсно спрацює, проте для таких випадків використання PYTHONPATHможе бути занадто складним. Те, що я рекомендую, - це використовувати virtualenv, яке зроблено спеціально для спрощення таких ситуацій, як ваша. Що ви повинні зробити, це в основному:

  1. Створіть середовище: virtualenv env
  2. "Активувати" це: source env/bin/activate
  3. Встановіть ваші пакунки: це можна зробити, використовуючи pipабо setup.pyсценарій ваших пакетів.
  4. Насолоджуйтесь.

Я не даю багато інформації, тому що virtualenv добре задокументований, і якщо вам потрібна допомога, вам краще відкрити нове запитання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.