Lor*_*ein 5 python distutils pip setuptools
我想修改Ansible项目中的setup.py脚本,以便我可以将 ansible 安装到 virtualenv 中,如下所示:
pip install -e git://github.com/lorin/ansible.git#egg=ansible
Run Code Online (Sandbox Code Playgroud)
当我现在这样做时,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
Run Code Online (Sandbox Code Playgroud)
据我所知,这些文件之一或两个都告诉 Python 在哪里可以找到 Ansible 模块。
$venv/lib/python2.7/sites-packages/ansible.egg-link:
/Users/lorin/.virtualenvs/ansible/src/ansible
.
Run Code Online (Sandbox Code Playgroud)
$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)
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,它都指向/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
Run Code Online (Sandbox Code Playgroud)
并且,“pip freeze”根本不报告该软件包已安装:
$ pip freeze
Jinja2==2.6
PyYAML==3.10
paramiko==1.7.7.2
pycrypto==2.6
wsgiref==0.1.2
Run Code Online (Sandbox Code Playgroud)
即使解决了这些问题,我也需要以某种方式设置ANSIBLE_LIBRARY环境变量以指向$venv/src/ansible/libraryvirtualenv 何时被激活。
所以,总而言之,我需要做什么:
ANSIBLE_LIBRARY变量?我也不想更改其他用例的 setup.py 脚本的行为。我对各种 Python 构建工具都没有任何经验,所以我很茫然。
可编辑安装(标志)的问题-e是它要求项目具有如下结构:
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 projectname\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 projectname\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 anotherfile.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 setup.py\nRun Code Online (Sandbox Code Playgroud)\n\n请注意该projectname子目录。在Ansible的例子中,它没有这个结构。所以它不能使用可编辑安装。
只需删除该-e标志,它可能会起作用:
pip install -e git://github.com/lorin/ansible.git#egg=ansible\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
4424 次 |
| 最近记录: |