Question

J’ai utilisé virtualenv récemment lors de mon développement en python. J'aime l'idée d'un environnement de développement séparé utilisant l'option --no-site-packages, mais le faire en développant une application PyGTK peut s'avérer un peu délicat. Les modules PyGTK sont installés sur Ubuntu par défaut et je voudrais informer un virtualenv (avec --no-site-packages) de modules spécifiques situés ailleurs sur le système.

Quelle est la meilleure façon de faire cela? Ou devrais-je simplement le laisser tomber et laisser tomber l'option --no-site-packages?

Était-ce utile?

La solution

$ virtualenv --no-site-packages --python=/usr/bin/python2.6 myvirtualenv
$ cd myvirtualenv
$ source bin/activate
$ cd lib/python2.6/
$ ln -s /usr/lib/pymodules/python2.6/gtk-2.0/ 
$ ln -s /usr/lib/pymodules/python2.6/pygtk.pth 
$ ln -s /usr/lib/pymodules/python2.6/pygtk.py 
$ ln -s /usr/lib/pymodules/python2.6/cairo/
$ python
>>> import pygtk
>>> import gtk

Autres conseils

Une solution consiste à ajouter les chemins d'accès à votre code à l'aide de sys.path.

import sys

sys.path.append(somepath)

Vous pouvez également utiliser le site, qui traite les fichiers .pth en plus de l'ajout à sys.path.

import site

site.addsitedir(sitedir, known_paths=None)

https://docs.python.org/library/site.html

Mais vous ne voulez probablement pas ajouter ceci à tout votre code associé.

J'ai vu parler de sitecustomize.py utilisé pour effectuer une telle opération, mais après quelques tests, je n'ai pas réussi à le faire fonctionner comme prévu.

Ici, il est mentionné que l'importation automatique de sitecustomize.py s'est terminée en 2.5, si vous ne l'utilisez pas, essayez-le. (il suffit d'ajouter l'une des méthodes add-path ci-dessus au fichier et de le déposer dans le répertoire dans lequel votre programme est exécuté) Une méthode de contournement est mentionnée dans l'article pour les utilisateurs de 2.5 et plus.

http://code.activestate.com/recipes/552729/

Je trouve dans cette situation que les liens symboliques, voire la copie de fichiers spécifiques (packages, modules, extensions) fonctionnent vraiment bien.

Il permet au programme d'émuler en cours d'exécution dans l'environnement cible, plutôt que de modifier l'application pour l'adapter à l'environnement de développement.

Même chose pour quelque chose comme AppEngine.

Découvrez le script de hook postmkvirtualenv ici:

https://stackoverflow.com/a/9716100/60247

Dans ce cas, il l'utilise pour importer PyQt et SIP après la création d'un nouveau serveur virtuel, mais vous pouvez ajouter les packages dont vous avez besoin à LIBS.

Et votez ce script parce qu'il est fantastique:)

Si vous souhaitez inclure les liens vers le python gtk-2.0 du système concerné dans le virtualenv, vous pouvez simplement utiliser pip pour installer ruamel.venvgtk :

pip installer ruamel.venvgtk Vous n'avez rien importé, les liens sont configurés lors de l'installation.

Ceci est particulièrement utile si vous utilisez tox . Dans ce cas, il vous suffit d'inclure la dépendance (pour tox):

deps:
    pytest
    ruamel.venvgtk

et un environnement python2.7 nouvellement installé auront les liens pertinents inclus avant l'exécution des tests.

Vous trouverez des informations plus détaillées sur la configuration des liens dans cette réponse

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top