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


19

У меня есть это в моем ~/.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'

Ответы:


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