Погрузочно-среда-модули-в-питон-скрипт
Загрузка модулей среды в скрипте 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']