Подтвердить что ты не робот

Использование .pth файлов

Я пытаюсь сделать модуль доступным для обнаружения в системе, где у меня нет доступа на запись в глобальный каталог site-packages и без изменения среды (PYTHONPATH). Я попытался поместить файл .pth в тот же каталог, что и script, который я выполняю, но он, кажется, игнорируется. Например, я создал файл extras.pth со следующим содержимым:

N:\PythonExtras\lib\site-packages

Но следующий script, помещенный и запущенный в том же каталоге, печатает False.

import sys
print r"N:\PythonExtras\lib\site-packages" in sys.paths

Единственный каталог в sys.path, к которому я имею доступ на запись, - это каталог, содержащий script. Есть ли другой (в настоящее время несуществующий) каталог, где я мог бы разместить extras.pth и его увидеть? Есть ли лучший способ сделать это?

Я использую python 2.7 для Windows. Все .pth вопросы, которые я мог найти здесь, используют каталоги системного модуля.

Изменить: Я отслеживал каталог установки для каждого пользователя Windows, %APPDATA%\Python\Python27\site-packages. Я могу разместить там модуль, и он будет импортирован, но если я поместил там файл .pth, он не будет иметь никакого эффекта. Это действительно не должно работать, или я делаю что-то неправильно?

4b9b3361

Ответ 1

Как описано в документации, файлы PTH обрабатываются только в том случае, если они находятся в каталоге site-packages. (Точнее, они обрабатываются, если они находятся в "каталоге сайта", но сам "каталог сайта" является глобальным параметром установки Python и не зависит от текущего каталога или каталога, в котором находится script.)

Если каталог, содержащий ваш script, находится на sys.path, вы можете создать sitecustomize.py в этом каталоге. Это будет загружено при запуске Python. Внутри sitecustomize.py вы можете сделать:

import site
site.addsitedir('/some/dir/you/want/on/the/path')

Это не только добавит этот каталог, но добавит его как "каталог сайта", в результате чего файлы PTH будут обработаны. Это удобно, если вы хотите создать свой собственный site-packages -like-каталог.

Если вам нужно добавить только один или два каталога в путь, вы можете сделать это проще. Просто создайте крошечную библиотеку Python, которая управляет sys.path, а затем импортирует эту библиотеку из вашего script. Что-то вроде:

# makepath.py
import sys
sys.path.append('/whatever/dir/you/want')

# script.py
import makepath

Изменить: Опять же, в соответствии с документацией, существует возможность каталога для сайта в %APPDATA%\Python\PythonXY\site-packages (в Windows). Вы можете попробовать это, если на самом деле у вас есть доступ на запись к этому (а не только к вашему каталогу script).