2012-07-22 29 views
4

安裝,我想從Ansible項目修改setup.py腳本,這樣我可以安裝ansible成的virtualenv像這樣:當我做這個現在修改setup.py支持畫中畫從GitHub

pip install -e git://github.com/lorin/ansible.git#egg=ansible 

,ansible不能正常運行,因爲它無法導入ansible模塊。

$ ansible 
Traceback (most recent call last): 
    File "/Users/lorin/.virtualenvs/ansible/bin/ansible", line 7, in <module> 
    execfile(__file__) 
    File "/Users/lorin/.virtualenvs/ansible/src/ansible/bin/ansible", line 25, in  <module> 
    from ansible.runner import Runner 
ImportError: No module named ansible.runner 

從我可以告訴,這些文件中的一個或兩個會向Python在哪裏可以找到Ansible模塊。

$venv/lib/python2.7/sites-packages/ansible.egg-link

/Users/lorin/.virtualenvs/ansible/src/ansible 
. 

$venv/lib/python2.7/sites-packages/easy-install.pth

import sys; sys.__plen = len(sys.path) 
./setuptools-0.6c11-py2.7.egg 
./pip-1.0.2-py2.7.egg 
/Users/lorin/.virtualenvs/ansible/src/ansible 
import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new) 

在這兩種情況下,它指向/Users/lorin/.virtualenvs/ansible/src/ansible,但我認爲它實際上應該指向/Users/lorin/.virtualenvs/ansible/src/ansible/lib,因爲ansible模塊的一個子集目錄。 (注意:因爲上游項目不太可能接受這種變化,所以我不能只將ansible/lib/ansible目錄移動到合理/合理的目錄中)。

我試圖手工修改這些文件,看看是否會解決這個問題,但透露了一個新的問題:

$ ansible 
Traceback (most recent call last): 
    File "/Users/lorin/.virtualenvs/ansible/bin/ansible", line 4, in <module> 
    from pkg_resources import require; require('ansible==0.6') 
    File "build/bdist.linux-i686/egg/pkg_resources.py", line 2603, in <module> 
    File "build/bdist.linux-i686/egg/pkg_resources.py", line 666, in require 
    File "build/bdist.linux-i686/egg/pkg_resources.py", line 565, in resolve 
pkg_resources.DistributionNotFound: ansible==0.6 

而且,「PIP凍結」不報告包安裝在所有:

$ pip freeze 
Jinja2==2.6 
PyYAML==3.10 
paramiko==1.7.7.2 
pycrypto==2.6 
wsgiref==0.1.2 

甚至有一次我解決這些問題,我需要以某種方式設置ANSIBLE_LIBRARY環境變量時,virtualenv中被激活指向$venv/src/ansible/library

所以,總結一下,我需要做什麼才能:

  • 獲取各種Python的路徑指向正確的目錄?
  • 處理版本錯誤?
  • 設置ANSIBLE_LIBRARY環境變量?

我也不想改變其他用例的setup.py腳本的行爲。我對任何各種Python構建工具都沒有任何經驗,所以我不知所措。

回答

3

可編輯的安裝(-e標誌)的問題是,它要求項目有一個像一個結構:

├── projectname 
│   ├── projectname 
│   │   ├── __init__.py 
│   │   └── anotherfile.py 
│   └── setup.py 

注意projectname子目錄。在Ansible的情況下,它沒有這種結構。所以它不能使用可編輯安裝。

只是刪除-e標誌,並且它可能工作:

pip install -e git://github.com/lorin/ansible.git#egg=ansible