我想修改setup.py项目中的Ansible脚本,以便我可以将ansible安装到这样的virtualenv中:
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 / 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 freeze”并未报告该软件包已安装:
$ 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
。
总而言之,我需要做些什么:
ANSIBLE_LIBRARY
环境变量?我也不想为其他用例更改setup.py脚本的行为。我对任何各种Python构建工具都没有任何经验,所以我很茫然。
答案 0 :(得分:3)
可编辑安装(-e
标志)的问题在于它要求项目具有如下结构:
├── projectname
│ ├── projectname
│ │ ├── __init__.py
│ │ └── anotherfile.py
│ └── setup.py
请注意projectname
子目录。在Ansible
的情况下,它没有这种结构。因此使用可编辑安装无效。
只需删除-e
标记,它就可以运行:
pip install -e git://github.com/lorin/ansible.git#egg=ansible
答案 1 :(得分:0)
请参阅:
pip install -e
将有效。