Загрузите недавно установленные модули в скрипте Python - PullRequest
2 голосов
/ 21 января 2012

Я пишу скрипт на python, который автоматически устанавливает среду веб-сервера django.

В этом скрипте я устанавливаю новые модули, используя

for package in packages:
    os.system("%s %s" % ('easy_install', package))

. Это прекрасно работает.Моя единственная проблема заключается в том, что я хочу использовать эти недавно установленные пакеты в том же сценарии, используя

package = __import__(package)

Это не работает, хотя, и я получаю ImportError: Нет модуля с именем reportlab (например)

Если я снова запускаю скрипт, он работает, так как я предполагаю, что все вновь установленные пакеты находятся в системном пути.Я надеялся, что есть способ импортировать новые модули без перезапуска скрипта.

Я попытался перезагрузить (sys), но это не помогло мне.Я могу взломать его, вручную добавив в sys.path или запустив новый скрипт на python с помощью os.system (), но я бы предпочел более чистое решение.

Ответы [ 3 ]

3 голосов
/ 21 января 2012

Не может быть более чистого решения.Вы устанавливаете пакет, который приводит к обновлению системного пути.Вы должны либо поработать с путем, либо запустить подпрограмму, которая работает в новой среде.

Также.Не используйте os.system.Пожалуйста, используйте subprocess.

Наименее рискованный способ сделать это - иметь «основной» сценарий, который выполняет только два вида действий.

  1. Использование subprocess.Popen для запуска последовательности сценариев easy_install.

  2. Используйте subprocess.Popen для выполнения остальной части работы после всех сценариев easy_install.Поскольку это отдельный процесс, он может создать отдельный путь Python со всеми новыми пакетами в нем.

0 голосов
0 голосов
/ 21 января 2012

Взгляните на Ткань , судя по всему, она сделает вашу жизнь намного проще.Джанго интеграция здесь.

...