Я пишу скрипт установки Python, который должен установить 2 дополнительных модуля через pip внутри скрипта, затем импортировать и использовать эти модули для завершения установки в том же скрипте.Вызов pip работает нормально, но когда я пытаюсь импортировать модуль ( winshell ), который я только что установил, я получаю сообщение об ошибке, что он не может импортировать другой модуль (win32con), который является частью второго установленного мной модуля ( pywin32 ).
Если я перезапущу скрипт после ошибки, все будет работать так, как должно, поэтому я знаю, что фактическая установка pip работает правильно.Мне кажется, что запущенный скрипт python просто не знает о некоторых из установленных модулей, пока программа не будет перезапущена.Есть ли способ заставить работающий скрипт «обновлять» модули, которые он видит, доступными без необходимости перезапуска программы?
Вот упрощенный код:
import os
import sys
try:
from pip import main as pipmain
except ImportError:
from pip._internal import main as pipmain
def create_shortcut():
print 'Creating shortcut...'
import winshell
link_filepath = os.path.join(winshell.desktop(), "Start.lnk")
with winshell.shortcut(link_filepath) as link:
link.path = sys.executable
link.description = "Shortcut to startup"
link.arguments = r"C:\temp\my_program.py"
def install_requirements():
print 'Installing requirements...'
pipmain(['install', '-r', 'wheelhouse/requirements.txt', '--no-index', '--find-links', 'wheelhouse'])
if __name__ == '__main__':
install_requirements()
create_shortcut()
Вот ошибка:
C:\temp>python my_installer.py
Installing requirements...
Looking in links: wheelhouse
Collecting pywin32>=224 (from -r wheelhouse/requirements.txt (line 1))
Collecting winshell>=0.6 (from -r wheelhouse/requirements.txt (line 2))
Installing collected packages: pywin32, winshell
Successfully installed pywin32-224 winshell-0.6
Creating shortcut...
Traceback (most recent call last):
File "my_installer.py", line 24, in <module>
create_shortcut()
File "my_installer.py", line 10, in create_shortcut
import winshell
File "C:\Python27\lib\site-packages\winshell.py", line 30, in <module>
import win32con
ImportError: No module named win32con
Когда я запускаю второй раз (и модули уже установлены):
C:\temp>python my_installer.py
Installing requirements...
Looking in links: wheelhouse
Requirement already satisfied: pywin32>=224 in c:\python27\lib\site-packages (from -r wheelhouse/requirements.txt (line 1)) (224)
Requirement already satisfied: winshell>=0.6 in c:\python27\lib\site-packages (from -r wheelhouse/requirements.txt (line 2)) (0.6)
Creating shortcut...
C:\temp>