2012-07-22 3 views
4

Je voudrais modifier le script setup.py du projet Ansible afin que je puisse installer ansible dans un virtualenv comme ceci:Modifier setup.py pour soutenir pip installer à partir de GitHub

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

Quand je fais cela maintenant , ansible ne fonctionne pas correctement, car il ne peut pas importer le module 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 

D'après ce que je peux dire, un ou les deux de ces fichiers Python indique où trouver le module 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) 

Dans les deux cas, il pointe vers /Users/lorin/.virtualenvs/ansible/src/ansible, mais je pense qu'il devrait en fait pointer vers /Users/lorin/.virtualenvs/ansible/src/ansible/lib, car le module ansible est un sous-ensemble de cette annuaire.

(Note: Je ne peux pas simplement déplacer le répertoire ansible/lib/ansible vers ansible/ansible car le projet en amont est peu susceptible d'accepter ce changement).

J'ai essayé de modifier ces fichiers manuellement pour voir si cela résoudrait le problème, mais qui a révélé un nouveau problème:

$ 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 

Et, « gel pip » ne signale pas que le paquet a été installé à tous:

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

Même une fois que je résoudre ces problèmes, je dois mettre en quelque sorte la variable d'environnement ANSIBLE_LIBRARY pour pointer vers $venv/src/ansible/library lorsque le virtualenv est activé.

Donc, pour résumer, que dois-je faire pour:

  • Obtenir les différents chemins de Python pour pointer vers le bon répertoire?
  • Faire face à l'erreur de version?
  • Définir la variable d'environnement ANSIBLE_LIBRARY?

Je ne veux pas non plus changer le comportement du script setup.py pour les autres cas d'utilisation. Je n'ai aucune expérience avec les différents outils de construction Python, donc je suis à court de ressources.

Répondre

3

Le problème avec l'installation modifiable (-e de drapeau) est qu'il nécessite le projet d'avoir un struct comme:

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

Notez que projectname sous-répertoire. Dans le cas de Ansible, il n'a pas cette structure. Cela ne fonctionne donc pas avec l'installation modifiable.

Il suffit de retirer le drapeau -e et il pourrait fonctionner:

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