PYTHONPATH игнорируется - PullRequest
10 голосов
/ 16 июня 2009

Среда: debian 4.0

Python 2,4

Мой «проект» установлен в:

/ USR / Библиотека / python2.4 / сайт-пакеты / проекта.

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

/ главная / мне / DEV / проект / ЦСИ

Итак, что я делаю:

export PYTHONPATH = / home / me / dev / project / src

IPython

import foo #, который находится в src

foo.__file__

*/usr/lib/python2.4/site-packages/project/foo.py*

вместо:

/ главная / мне / DEV / проект / SRC / проект / foo.py

Как получилось? Я пытаюсь проверить пути (выполнив экспорт выше), и я вижу:

import sys, os

sys.path

[ '', '/ USR / бен', '/Usr/lib/python2.4/site-packages', '/ Главная / мне / DEV / проект / ЦСИ', '/Usr/lib/python24.zip', '/Usr/lib/python2.4', '/Usr/lib/python2.4/plat-linux2', '/Usr/lib/python2.4/lib-tk', '/Usr/lib/python2.4/lib-dynload', '/Usr/local/lib/python2.4/site-packages', '/Usr/lib/python2.4/site-packages/PIL', '/Var/lib/python-support/python2.4', '/usr/lib/python2.4/site-packages/IPython/Extensions', «/home/me/.ipython']

os.environ [ 'PYTHONPATH']

/ главная / мне / DEV / проект / ЦСИ

Ответы [ 7 ]

6 голосов
/ 16 июня 2009

Согласно документации Python, это ожидаемое поведение : https://docs.python.org/2.4/lib/module-sys.html:

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

Под python-2.6 он отличается: http://docs.python.org/tutorial/modules.html#the-module-search-path

5 голосов
/ 16 июня 2009

Я обнаружил проблему (я пропустил рано, когда кто-то указал мне на Откуда инициализируется sys.path Python? ).

Кажется, что easy_install создает файл pth /usr/lib/python2.4/site-packages/easy-install.pth, который затем загружается site.py. Это вставит путь к пакетам сайта в путь sys перед PYTHONPATH. Не красиво.

4 голосов
/ 16 июня 2009

Я не верю, что у вас есть контроль над тем, где PYTHONPATH вставляется в список фактических путей. Но это не единственный способ изменить путь - вы можете самостоятельно обновить sys.path, прежде чем пытаться импортировать проект.

Редактировать: В вашем конкретном случае вы можете изменить путь с помощью

import sys
sys.path.insert(2, '/home/me/dev/project/src')
1 голос
/ 16 июня 2009

Не прямой ответ на ваш вопрос, но вы также можете использовать virtualenv для создания среды разработки. В этом virtualenv вы можете установить ваш продукт в / home / me / dev / project / src в виде пакета для разработки: "python setup.py develop".

Таким образом, вам не нужно менять PYTHONPATH вручную. Просто активируйте virtualenv, если хотите использовать код разработки.

1 голос
/ 16 июня 2009

Я вижу «/usr/lib/python2.4/site-packages» на вашем пути до «/ home / me / dev / project / src», это имеет значение? Что происходит, когда вы переключаете два?

Из документов:

Когда PYTHONPATH не задан или файл там не найден, поиск продолжается по пути установки по умолчанию

Так, возможно, вы не нашли свою рабочую копию на своей PYTHONPATH, как вы думали?

0 голосов
/ 16 июня 2009

Похоже, что каталог src не имеет файла __init__.py. Это неправильный пакет.

0 голосов
/ 16 июня 2009

Я думаю, что вы настроили PYTHONPATH для / home / me / build / project / src, поскольку / home / me / dev / project / src не отображается в sys.path, но / home / me / build / project / src делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...