it-swarm.com.ru

Переменная окружения PYTHONPATH

У меня есть это в моем ~/.profile:

export PYTHONPATH=/home/dev/python-files

В каталоге python-files у меня есть несколько проектов, клонированных из git-hub (flask, кривый и 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'
16
jerome

Попробуйте добавить в PYTHONPATH вместо того, чтобы полностью перезаписать его.

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

Рекомендации:

Согласно документация Python по PYTHONPATH

Дополнить путь поиска по умолчанию для файлов модулей. [...]

Путь поиска по умолчанию зависит от установки, но обычно начинается с prefix/lib/pythonversion (см. PYTHONHOME выше). Он всегда добавляется к PYTHONPATH.

это означает, что некоторые значения существуют в PYTHONPATH и путь поиска по умолчанию также только добавляется.

Кроме того, это сообщение в блоге ( ссылка на Archive.org ) также четко объясняет, почему вам нужно добавить PYTHONPATH, а не перезаписывать его. Прокрутка вниз до раздела - Особые случаи и изучение пути поиска объясняет это ясно (к сожалению, нет относительного URL для этой ссылки, поэтому вам придется прокрутить) , Хотя пользователь приводит примеры на Mac, они очень актуальны для любой платформы

30
Nitin Venkatesh

Вы также можете сделать следующее:

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

pwd - это текущий рабочий каталог.

4
Mrudhvika Damaraju

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 хорошо задокументировано и если вам нужна помощь с чем-то, вам лучше открыть новый вопрос.

3
Andrea Corbellini