我在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 --configure
。 pexpect
已正确安装,并且在第一次执行脚本时,我收到错误消息,说它可以找到pexpect
。但是,第二次运行脚本时,它完美无缺。可能是因为python库还没有更新。如何刷新或更新python的模块,以便我不再遇到这个问题?
答案 0 :(得分:2)
当Python启动时,它会找出要搜索模块的目录,并将它们全部添加到sys.path
。你看到的问题可能是因为apt安装了一个全新的目录,而Python当时并不知道。
我不能说这是多么可靠,但site
module中有些声称与Python在启动时进行相同目录扫描的功能,所以你可以试试这个:
import site
import sys
sys.path[:] = site.getusersitepackages() + site.getsitepackages()
警告:这将不将当前目录保留在您的路径中,如果自程序启动以来目录已经发生了很大变化,它可能会混淆现有模块等。
稍微强一些的方法是检查这些函数返回的列表,并将任何 new 目录添加到sys.path
的末尾,而不是直接替换它。