【问题标题】:Load newly installed modules in python script在 python 脚本中加载新安装的模块
【发布时间】:2012-02-15 12:33:19
【问题描述】:

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

在脚本中,我正在使用安装一个新模块

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

这很好用。我唯一的问题是我想在同一个脚本中使用这些新安装的包

package = __import__(package)

这不起作用,我收到 ImportError: No module named reportlab(例如)

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

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

【问题讨论】:

    标签: python django python-module


    【解决方案1】:

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

    还有。不要使用os.system。请使用subprocess

    这样做风险最小的方法是拥有一个只做两种事情的“主”脚本。

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

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

    【讨论】:

      【解决方案2】:

      看看Fabric,从外观上看,它会让你的生活更轻松。 Django integration 在这里。

      【讨论】:

        【解决方案3】:
        猜你喜欢
        • 1970-01-01
        • 2011-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-23
        • 2021-03-11
        • 2014-11-22
        相关资源
        最近更新 更多