Заставить Python использовать код в Моем каталоге (не в / usr / ...) - PullRequest
2 голосов
/ 17 ноября 2009

Я пытаюсь работать с библиотекой Python, которая уже установлена ​​в моей системе (Ubuntu). Я проверил эту библиотеку, отредактировал некоторые файлы и написал небольшой скрипт для проверки моих изменений. Несмотря на то, что я поместил свой скрипт в ту же папку, что и библиотека, похоже, что вместо этого Python использует установленную версию (ту, что в /usr/share/pyshared/...).

Это моя структура каталогов:

src
+ my_package
    - my_script.py
+ library_package
    - lots_of_code

Как я могу сказать Python использовать код в моем каталоге, а не в установленном?

Ответы [ 5 ]

3 голосов
/ 17 ноября 2009
import sys
from os.path import join, dirname, pardir

sys.path.insert(0, join(dirname(__file__), pardir))

Это проверит каталог src на наличие любых модулей Python и будет искать их в первую очередь. Таким образом, даже если у вас есть модуль с таким же именем, установленный в другом месте, это заставит python загрузить локальный модуль.

sys.path documentation.

3 голосов
/ 17 ноября 2009

Давайте рассмотрим более общую проблему. В / usr / share / pyshared / есть много модулей. Вы хотите переопределить только один из модулей. Скажем, имя модуля xyz.py. И бывает также использовать другие модули в / usr / shared / pyshared.

Скажем, мы создаем $ HOME / mylibs и добавляем $ HOME в sys.path Python.

Теперь, где бы мы ни использовали xyz, мы делаем что-то вроде

from mylibs import xyz

Если мы хотим вернуться к исходному xyz, мы попробуем:

import xyz # picks up from /usr/shared/pyshared 

Интересно, будет ли такой подход более общим? Вы маскируете только те модули, которые вы переопределяете, и продолжаете использовать других как обычно.

3 голосов
/ 17 ноября 2009

Вы можете указать, где python ищет модули, используя переменную окружения PYTHONPATH:

Когда импортируется модуль с именем спам, переводчик ищет файл с именем spam.py в текущем каталог, а затем в списке каталоги, указанные переменная окружения PYTHONPATH. это имеет тот же синтаксис, что и оболочка переменная PATH, то есть список имена каталогов. Когда PYTHONPATH не установлен, или когда файл не найден там поиск продолжается в зависимый от установки путь по умолчанию; в Unix это обычно ..: / USR / местные / Библиотека / питон

от http://docs.python.org/tutorial/modules.html#the-module-search-path

1 голос
/ 17 ноября 2009

Проверьте полный путь, который Python использует до sys.path. Вы должны быть в состоянии добавить к пути (впереди для приоритета).

Конечно, вы также можете использовать переменную среды PYTHONPATH или обходной путь, используя .pth файлы.

0 голосов
/ 17 ноября 2009

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

$ cd src
$ export PYTHONPATH=./library_package
$ python my_package/my_script.py
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...