2010-04-15 6 views
4

J'ai une tâche Fabric qui doit accéder aux paramètres de mon projet Django.Activer un environnement virtuel python en utilisant activate_this.py dans un fichier fab sur Windows

Sous Windows, je n'arrive pas à installer Fabric dans le fichier virtualenv du projet (problème avec Paramiko + pycrypto deps). Cependant, je suis capable d'installer Fabric dans mes paquets de site à l'échelle du système, pas de problème. J'ai installé Django dans le virtualenv du projet et je peux facilement utiliser toutes les commandes "> python manage.py" lorsque j'active virtualenv avec le script "VIRTUALENV \ Scripts \ activate.bat". J'ai un fichier de tâches de fabric (fabfile.py) dans mon projet qui fournit des tâches pour l'installation, le test, le déploiement, etc. Certaines des tâches de mon fabfile doivent accéder aux paramètres de mon projet django via "from django" paramètres d'importation .conf ". Étant donné que la seule installation Fabric que j'utilise se trouve dans les paquets de site de mon système, j'ai besoin d'activer virtualenv dans mon fabfile pour que django devienne disponible. Pour ce faire, j'utilise le module "activate_this" du projet virtualenv du projet afin d'avoir accès aux paramètres du projet et autres. En utilisant "print sys.path" avant et après j'exécute activate_this.py, je peux dire aux changements de chemin python de pointer vers le virtualenv pour le projet. Cependant, je ne peux toujours pas importer django.conf.settings.

J'ai réussi à le faire sur * nix (Ubuntu et CentOS) et dans Cygwin. Utilisez-vous cette configuration/workflow sur Windows? Si oui Pouvez-vous m'aider à comprendre pourquoi cela ne fonctionnera pas sous Windows ou fournir des conseils et astuces pour contourner ce problème?

Merci et à la vôtre.


REF:

environnement de développement local:

  • Python 2.5.4
  • virtualenv 1.4.6
  • Tissu 0.9.0
  • Pip 0.6.1
  • Django 1.1.1
  • Windows XP (SP3)

Répondre

6

Après quelques recherches, j'ai découvert que cela est un problème avec le activate_this.py scénario. Dans son état actuel, virtualenv < = 1.4.6, ce script suppose que le chemin du répertoire site-packages est le même pour toutes les plateformes. Toutefois, le chemin d'accès au répertoire répertoires diffère entre les plates-formes semblables à Windows et Windows.

Dans ce cas, le activate_this.script py ajoute le chemin de style * nix:

VIRTUALENV_BASE/lib/python2.5/site-packages/

sur le chemin de python au lieu du chemin spécifique de Windows:

VIRTUALENV_BASE \ Lib \ site- packages \

J'ai créé un problème dans le programme de suivi des problèmes virtualenv qui décrit le problème et la solution. Si vous êtes intéressé, vous pouvez vérifier le problème ici: http://bitbucket.org/ianb/virtualenv/issue/31/windows-activate_this-assumes-nix-path-to-site

Espérons que le correctif sera rendu disponible dans une version supérieure de virtualenv.


Si vous avez besoin d'un correctif pour ce problème en ce moment, et le paquet virtualenv n'a pas encore été patché, vous pouvez « fixer » votre propre activate_this.py comme indiqué ci-dessous.

Modifiez votre fichier VIRTUALENV \ Scripts \ activate_this.py. Modifiez la ligne (17?):

site_packages = os.path.join(base, 'lib', 'python%s' % sys.version[:3], 'site-packages') 

à

if sys.platform == 'win32': 
    site_packages = os.path.join(base, 'Lib', 'site-packages') 
else: 
    site_packages = os.path.join(base, 'lib', 'python%s' % sys.version[:3], 'site-packages') 

Avec cela en place, votre script activate_this.py serait d'abord vérifier quelle plate-forme, il est en cours d'exécution sur puis adapter le chemin vers le site -Packages répertoire pour s'adapter.

Profitez-en!

+0

Le problème est maintenant résolu. –

2

Vous devrez exécuter l'activer depuis le fichier fab. Altho Je ne l'ai pas testé, je crois devrait fonctionner:

activate_this = '/path/to/env/bin/activate_this.py' 
execfile(activate_this, dict(__file__=activate_this)) 
+0

Oui c'est exactement ce que je fais dans mon fabfile - jusqu'à présent cela ne fonctionne pas pour moi sur Windows. Je vous serais reconnaissant si vous pouviez faire un test rapide dans Windows et laissez-moi savoir comment cela se passe pour vous. –

Questions connexes