2015-09-09 73 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