【问题标题】:Modify setup.py to support pip install from github修改 setup.py 以支持从 github 安装 pip
【发布时间】:2012-07-22 01:18:29
【问题描述】:

我想修改 Ansible 项目中的 setup.py 脚本,以便我可以像这样将 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

即使我解决了这些问题,我也需要在激活 virtualenv 时以某种方式将 ANSIBLE_LIBRARY 环境变量设置为指向 $venv/src/ansible/library

所以,总结一下,我需要做什么:

  • 获取各种 Python 路径以指向正确的目录?
  • 处理版本错误?
  • 设置ANSIBLE_LIBRARY环境变量?

我也不想为其他用例更改 setup.py 脚本的行为。我对任何各种 Python 构建工具都没有任何经验,所以我很茫然。

【问题讨论】:

    标签: python pip setuptools distutils


    【解决方案1】:

    可编辑安装(-e 标志)的问题在于它要求项目具有如下结构:

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

    注意projectname 子目录。在Ansible 的情况下,它没有这种结构。所以它不能使用可编辑安装。

    只需删除 -e 标志,它可能会起作用:

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

    【讨论】:

      【解决方案2】:

      【讨论】:

        猜你喜欢
        • 2012-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-14
        • 1970-01-01
        • 2021-12-10
        • 2018-01-28
        • 2015-03-05
        相关资源
        最近更新 更多