2015-09-09 77 views
1

我动态直接导入PIP模块和安装requirements.txt脚本运行期间安装代码:无法导入动态安装Python模块

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

嗯,这是一个快速的转变。我一直在试图找出这个问题几天,终于在询问这里几分钟后提出了我的答案。

如果一个尚不存在的路径被添加到sys.path,那么当导入模块时,它不会再被检查,即使它存在于稍后的点(或者至少在python 2.7中)。

在我的测试中,当我将它添加到sys.path时,site.USER_SITE不存在。如果我第一次确定该目录存在,那么一切都会如何运作:

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