无法导入动态安装的python模块

时间:2015-09-09 11:46:39

标签: python install pip

我在脚本运行期间动态安装代码,方法是直接导入pip模块并安装requirements.txt:

import pip
import site
import sys

# since I'm installing with --user, packages should be installed here,
# so make sure it's on the path
sys.path.insert(0, site.USER_SITE)

pip.main(["install", "--user", "package1"])
import package1

软件包安装没有错误,但import package1失败。如果我退出脚本并在没有安装的情况下再次运行它(因为它已经安装好了),它就可以正常工作。

我还仔细检查过site.USER_SITE是否安装了package1。一切都在sys.path上,但我仍然无法导入它。

1 个答案:

答案 0 :(得分:1)

嗯,这是一个快速的转变。我已经试着将这个问题搞砸了几天,最后在问到这里后几分钟就找到了答案。

如果将一条尚不存在的路径添加到sys.path,则导入模块时似乎不会再次检查它,即使它稍后存在(或至少存在)在python 2.7)。

在我的测试中,site.USER_SITE在我将其添加到sys.path时并不存在。如果我首先确定该目录存在,那么一切都按照您的想法运行:

import os
import pip
import site
import sys

# this makes it work
if not os.path.exists(site.USER_SITE):
    os.makedirs(site.USER_SITE)

# since I'm installing with --user, packages should be installed here,
# so make sure it's on the path
sys.path.insert(0, site.USER_SITE)

pip.main(["install", "--user", "package1"])
import package1