PYTHONPATH игнорируется
Среда: debian 4.0
Python 2.4
Мой "проект" установлен в:
/usr/lib/python2.4/site-packages/project.
Но я хочу использовать свою рабочую копию вместо установленной, которая находится в:
/главная/мне/DEV/проект/ЦСИ
Так что я делаю:
export PYTHONPATH =/home/me/dev/project/src
IPython
import foo #, который находится в src
foo.__file__
*/usr/lib/python2.4/site-packages/project/foo.py*
вместо:
/home/me/dev/project/src/project/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/проект/ЦСИ
Ответы
Ответ 1
Согласно документации python, ожидается поведение: https://docs.python.org/2.4/lib/module-sys.html:
Обратите внимание, что каталог scriptвставлено до вставленные записи в результате PYTHONPATH.
В python-2.6 он отличается: http://docs.python.org/tutorial/modules.html#the-module-search-path
Ответ 2
Я нашел проблему (я пропустил раньше, когда кто-то указал мне на Где инициализируется sys.path Python из?).
Кажется, что easy_install создает pth файл /usr/lib/python 2.4/site-packages/easy-install.pth, который затем загружается site.py. Это вставляет путь сайта-пакетов в путь sys до PYTHONPATH. Не приятно.
Ответ 3
Я не считаю, что у вас есть контроль над тем, где PYTHONPATH вставлен в фактический список путей. Но это не единственный способ изменить путь - вы можете обновить sys.path самостоятельно, прежде чем пытаться импортировать проект.
Изменить: В вашем конкретном случае вы можете изменить путь с помощью
import sys
sys.path.insert(2, '/home/me/dev/project/src')
Ответ 4
Я вижу '/usr/lib/python2.4/site-packages' на вашем пути до '/home/me/dev/project/src', это важно? Что происходит, когда вы переключаете два?
Из документов:
Если параметр PYTHONPATH не установлен или файл там не найден, поиск продолжается в зависимом от установки пути по умолчанию
Итак, возможно, вы не нашли свою рабочую копию на своем PYTHONPATH, как вы думали?
Ответ 5
Не прямой ответ на ваш вопрос, но вы также можете использовать virtualenv, чтобы создать среда разработки. В этом virtualenv вы можете установить свой продукт в /home/me/dev/project/src в качестве пакета разработки: "python setup.py develop".
Таким образом, вам не нужно вручную изменять PYTHONPATH. Просто активируйте virtualenv, если вы хотите использовать код разработки.
Ответ 6
Я думаю, что вы настроили PYTHONPATH на /home/me/build/project/src, так как /home/me/dev/project/src не отображается в sys.path, но /home/me/build/project/src делает.
Ответ 7
Похоже, что каталог src
не имеет файла __init__.py
. Это не правильный пакет.