如何重新加载python模块?

时间:2014-02-10 02:46:35

标签: python

我在python中实现了以下方法:

def install_s3cmd():
    subprocess.call(['sudo easy_install s3cmd'])

    # assuming that by now it's already been installed
    import pexpect

    # now use pexpect to configure s3cdm
    child = pexpect.spawn('s3cmd --configure')
    child.expect ('(?i)Access Key')
    # ... more code down there

def main():
    subprocess.call(['sudo apt-get install python-setuptools']) # installs easy_install
    subprocess.call(['sudo easy_install pexpect']) # installs pexpect
    install_s3cmd()
    # ... more code down here

if __name__ == "__main__":
    main()

我需要安装pexpect,因此我可以安装s3cmd --configurepexpect已正确安装,并且在第一次执行脚本时,我收到错误消息,说它可以找到pexpect。但是,第二次运行脚本时,它完美无缺。可能是因为python库还没有更新。如何刷新或更新python的模块,以便我不再遇到这个问题?

1 个答案:

答案 0 :(得分:2)

当Python启动时,它会找出要搜索模块的目录,并将它们全部添加到sys.path。你看到的问题可能是因为apt安装了一个全新的目录,而Python当时并不知道。

我不能说这是多么可靠,但site module中有些声称与Python在启动时进行相同目录扫描的功能,所以你可以试试这个:

import site
import sys
sys.path[:] = site.getusersitepackages() + site.getsitepackages()

警告:这将将当前目录保留在您的路径中,如果自程序启动以来目录已经发生了很大变化,它可能会混淆现有模块等。

稍微强一些的方法是检查这些函数返回的列表,并将任何 new 目录添加到sys.path的末尾,而不是直接替换它。