Импортирующие модули Python по-разному при выполнении интерактивного/неинтрактативного
-
21-09-2019 - |
Вопрос
Один из моих сценариев Python работает в интерактивном режиме, но сбой при запуске из командной строки. Разница в том, что при запуске из командной строки он импортирует модули из плохого файла.
Мой вопрос в два раза: а) Почему Python загружает модули по-разному при запуске из этих мест, и б) каковы мои варианты обойти его?
Решение
Я не понимаю, что вы имеете в виду под запуска скрипта в интерактивном режиме, поэтому я не могу точно сказать. Но первое место для поиска модулей (sys.path[0]
) в интерактивном режиме является текущий каталог (даже вызов os.chdir()
повлияет на импорт), в то время как для сценария его каталога, где расположен сценарий (получен из sys.argv[0]
) Обратите внимание, что они фактически одинаковы, когда сценарий работает из каталога, где он находится, но может отличаться в других случаях. Надеюсь это поможет.
Другие советы
На системах UNIX и Mac OS-X:
- У тебя есть
~/.python-eggs
каталог?
ОС независимо:
Вы уверены, что используете один и тот же экземпляр Python в обоих случаях?
Вы можете распечатать
sys.path
В каждом случае и посмотрите, какой каталог пакетов поступает на первом месте на пути поиска модуля?
A) Почему Python загружает модули по -разному при запуске из этих мест б) каковы мои варианты обойти его?
Проверьте переменную среды Pythonpath. Когда Python Imports Module, он ищет эти каталоги. Один из способов обойти вашу проблему - добавить вашу локальную папку «(распакованная) версия в текущем каталоге» в начало Pythonpath, чтобы Python нашел ее первым.
Это работает для меня:
import sys
sys.path[0]=''