我在脚本运行期间动态安装代码,方法是直接导入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上,但我仍然无法导入它。
答案 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