2012-07-22 40 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