在python脚本中加载新安装的模块

时间:2012-01-21 01:28:32

标签: python django python-module

我正在编写一个自动设置django Web服务器环境的python脚本。

在脚本中,我正在使用

安装新模块
for package in packages:
    os.system("%s %s" % ('easy_install', package))

这很好用。我唯一的问题是我想使用

在同一个脚本中使用这些新安装的软件包
package = __import__(package)

这不起作用,我收到一个ImportError:没有名为reportlab的模块(例如)

如果我再次运行脚本,脚本就会起作用,因为我假设所有新安装的软件包都在系统路径上。我希望有一种方法可以在不重新启动脚本的情况下导入新模块。

我尝试了重载(sys),但它没有帮助我。我可以通过手动附加到sys.path或使用os.system()启动一个新的python脚本来破解它,但我更喜欢更清洁的解决方案。

3 个答案:

答案 0 :(得分:3)

没有更清洁的解决方案。您正在安装程序包,这会导致系统路径的更新。您必须修改路径或启动在新环境中工作的子脚本。

另外。不要使用os.system。请使用subprocess

执行此操作的风险最小的方法是使用“主”脚本,只执行两种操作。

  1. 使用subprocess.Popen运行easy_install脚本序列。

  2. 在所有easy_install脚本之后使用subprocess.Popen完成剩下的工作。由于这是一个单独的过程,因此它可以构建一个单独的Python PATH,其中包含所有新包。

答案 1 :(得分:0)

看看Fabric,看看它会让你的生活变得更轻松。 Django integration在这里。

答案 2 :(得分:0)