2016-12-16 100 views
1

我使用CentOS 6.4和Python 2.6.6來運行Ansible 2.3.0。但是,當我進入我的Python虛擬ENV其中有蟒蛇3.4.1並運行「ansible --version」我得到以下錯誤:由reffering ImportError: No Module named yaml | Ansible 在Python虛擬環境中沒有名爲yaml的模塊

Traceback (most recent call last): 
File "/home/namaaror/Desktop/githubansible/bin/ansible", line 80, in <module> 
from ansible.cli.adhoc import AdHocCLI as mycli 
File "/home/namanarora/Desktop/github/ansible/lib/cli/__init__.py", line 28, in <module> 
import yaml 
ImportError: No module named 'yaml' 

我甚至嘗試安裝pyyaml但錯誤依然仍然存在。它是否與yaml安裝目錄和sys.path有關?

+0

什麼是你的目標是什麼? – techraf

+0

@techraf使用python 3.4在centos中運行安全的劇本6.4 – Naman

+2

當您運行'pip install pyyaml'時,您的虛擬env是否激活?如果你像'sudo'那樣運行它,那很可能不是。然後在沒有'sudo'的情況下再試一次 – damienfrancois

回答

1

後,您激活的virtualenv(通過ansible與否),你不應該使用sudopip作爲整體的virtualenv及其所有目錄由您擁有安裝的東西。

事實上,如果你使用sudo你可能不會使用的virtualenv的pip

$ mktmpenv 
Using real prefix '/opt/python/2.7' 
New python executable in /home/venv/tmp-ef9b4ef621d87221/bin/python 
Installing setuptools, pip, wheel...done. 
This is a temporary environment. It will be deleted when you run 'deactivate'. 
(tmp-ef9b4ef621d87221) $ which pip 
/home/venv/tmp-ef9b4ef621d87221/bin/pip 
(tmp-ef9b4ef621d87221) $ sudo which pip 
[sudo] password for root: 
/usr/local/bin/pip 

(答案可能是一樣的,這取決於您的登錄腳本和root的PATH)。因此,激活的virtualenv後安裝東西的時候,你不應該使用sudo pip install,只需使用

pip install .... 
-1

查看您所在python3的dist-包目錄/usr/local/lib/pythonX.XX/dist-packages,看是否pyyaml是安裝在那裏。

如果它們不存在,您可以用sudo apt-get install python3-yaml安裝它們(您可能需要python3-setuptools的和python3輪以及)