Погрузочно-среда-модули-в-питон-скрипт

Загрузка модулей среды в скрипте Python

Вышеупомянутое решение ведет себя по-разному в интерактивной оболочке python и в исполняемом файле python, и мне нужна помощь в понимании того, как заставить его работать в настройке exe.py, где операторы импорта, по-видимому, не видят переменную окружения PYTHONPATH.

В оболочке python решение позволяет загружать модуль среды, который модифицирует PYTHONPATH; Впоследствии я могу импортировать модуль Python из этой исправленной PYTHONPATH. Это отличная функциональность и именно то, что я хочу сделать в исполняемом скрипте Python.

В скрипте python (с заголовком #!/ Usr/bin/env python и т. Д.) Он работает нормально вплоть до изменения PYTHONPATH, включая

if 'PYTHONPATH' in os.environ: print 'PYPATH:', os.environ['PYTHONPATH']
# nothing prints

execfile('/usr/local/Modules/default/init/python.py')
module('list')
# No Modulefiles Currently Loaded.

module('load', 'my_module')
print 'loaded my_module'
# loaded my_module
module('list')
#   1) /my_module
if 'PYTHONPATH' in os.environ: print 'PYPATH:', os.environ['PYTHONPATH']
# /home/me/py/my_module

Но это все, что работает в python.exe

Попытки импортировать из my_module, которые работают нормально в оболочке python, приводят к отчетам Traceback: ImportError: Нет модуля с именем module_1

Из этого я думаю, что могу сделать вывод, что python не использует или "видит" измененный PYTHONPATH, когда я запускаю его в исполняемом файле python (но видит его, когда в интерактивной оболочке python).

Это то, где я застреваю! Есть идеи? Помощь высоко ценится. Могу поспорить, что есть действительно простое решение, которое я упустил, и я буду рад услышать об этом.

спасибо и хорошего дня

Мат

Изменить: Еще немного чтения предполагает, что Python сам добавляет содержимое PYTHONPATH в sys.path, но это не происходит ни в интерактивной оболочке Python, ни когда я запускаю python.exe.

Если я использую sys.path.insert(1,os.environ['PYTHONPATH']), чтобы сделать это вручную в исполняемом файле, то я получаю функциональность, которую хочу

1 ответ

Я думаю, что pythonpath читается во время инициализации для добавления путей в sys.path, см. Некоторые примеры в проблемах sys.path() и PYTHONPATH.

Таким образом, переменная, которую вам нужно обновить, это на самом деле только sys.path - когда python уже инициализирован, это слишком поздно для обновления os.environ['PYTHONPATH']

Другие вопросы по тегам