J'avais l'impression que virtualenv --no-site-packages
cela créerait un environnement Python complètement séparé et isolé, mais cela ne semble pas.
Par exemple, j'ai python-django installé globalement, mais je souhaite créer un virtualenv avec une version différente de Django.
$ virtualenv --no-site-packages foo
New python executable in foo/bin/python
Installing setuptools............done.
$ pip -E foo install Django
Requirement already satisfied: Django in /usr/share/pyshared
Installing collected packages: Django
Successfully installed Django
D'après ce que je peux dire, ce qui pip -E foo install
précède est censé réinstaller une nouvelle version de Django. De plus, si je dis à pip de geler l'environnement, j'obtiens beaucoup de paquets. Je m'attendrais à ce que pour un nouvel environnement avec --no-site-packages
ce serait vide?
$ pip -E foo freeze
4Suite-XML==1.0.2
BeautifulSoup==3.1.0.1
Brlapi==0.5.3
BzrTools==1.17.0
Django==1.1
... and so on ...
Suis-je mal compris comment --no-site-packages
est censé fonctionner?
python
virtualenv
pip
ianw
la source
la source
--no-site-packages
est dit DÉPRECÉ. Conservé uniquement à des fins de compatibilité descendante. Ne pas avoir accès aux packages de sites globaux est désormais le comportement par défaut . Si vous souhaitez accéder aux packages de sites globaux, vous pouvez activer--system-site-packages
.Réponses:
J'ai eu un problème comme celui-ci, jusqu'à ce que je réalise que (bien avant que je découvre virtualenv), j'étais allé ajouter des répertoires au PYTHONPATH dans mon fichier .bashrc. Comme cela faisait plus d'un an auparavant, je n'y ai pas pensé tout de suite.
la source
--no-site-packages
au travail. Je me rapproche juste d'essuyer Ubuntu et de voir si cela corrige les choses. Je pensais au départ que j'avais le même problème de PYTHONPATH, mais en courantprintenv
, je ne peux pas le voir. La frustration monte et toute aide est très appréciée. Mon sys.path de l'intérieur d'un venv créé avec--no-site-packages
semble inclure tous mes répertoires de paquets. Je ne sais pas comment modifier cela. Aidez-moi?PATH
variable globale si vous trouvez également des exécutables en dehors de virtualenv.Vous devez vous assurer que vous exécutez le
pip
binaire dans l'environnement virtuel que vous avez créé, et non dans l'environnement global.Voir un test:
Nous créons le virtualenv avec l'
--no-site-packages
option:Nous vérifions la sortie de
freeze
la nouvellement crééepip
:Mais si nous utilisons le global
pip
, voici ce que nous obtenons:Autrement dit, tous les packages
pip
installés dans tout le système. En vérifiant,which pip
nous obtenons (du moins dans mon cas) quelque chose comme/usr/local/bin/pip
, ce qui signifie que lorsque nous le faisons, nouspip freeze
appelons ce binaire au lieu demytest/bin/pip
.la source
pip
vers un chemin spécifique vers le pip global, qui n'était pas remplacé lors de l'activation de virtualenv.Finalement, j'ai trouvé que, pour une raison quelconque, pip -E ne fonctionnait pas. Cependant, si j'active réellement virtualenv et que j'utilise easy_install fourni par virtualenv pour installer pip, puis que j'utilise pip directement de l'intérieur, cela semble fonctionner comme prévu et n'afficher que les packages dans virtualenv
la source
Je sais que c'est une question très ancienne mais pour ceux qui arrivent ici à la recherche d'une solution:
N'oubliez pas d' activer virtualenv (
source bin/activate
) avant de démarrerpip freeze
. Sinon, vous obtiendrez une liste de tous les packages globaux.la source
Effacez temporairement le
PYTHONPATH
avec:Ensuite, créez et activez l'environnement virtuel:
Seulement à ce moment-là:
la source
--no-site-packages
devrait, comme son nom l'indique, supprimer le répertoire standard site-packages desys.path
. Tout ce qui se trouve dans le chemin Python standard y restera.la source
PYTHONPATH
avecexport PYTHONPATH=
semblait faire l'affaire.Un problème similaire peut se produire sous Windows si vous appelez directement des scripts
script.py
qui utilisent ensuite l'ouvreur par défaut de Windows et ouvre Python en dehors de l'environnement virtuel. L'appeler avecpython script.py
utilisera Python avec l'environnement virtuel.la source
Cela semble également se produire lorsque vous déplacez le répertoire virtualenv vers un autre répertoire (sous Linux) ou que vous renommez un répertoire parent.
la source
J'avais ce même problème. Le problème pour moi (sur Ubuntu) était que mon nom de chemin contenait
$
. Lorsque j'ai créé un virtualenv en dehors de $ dir, cela fonctionnait bien.Bizarre.
la source
L'une des raisons possibles pour lesquelles virtualenv pip ne fonctionnera pas est si l'un des dossiers parents avait de l'espace dans son nom en le
/Documents/project name/app
renommant pour/Documents/projectName/app
résoudre le problème.la source
Je suis tombé sur le même problème où pip dans venv fonctionne toujours comme pip global.
Après avoir cherché de nombreuses pages, je le comprends de cette façon.
1. Créez un nouveau venv par virtualenv avec l'option "--no-site-packages"
veuillez noter que bien que l'option "--no-site-packages" soit vraie par défaut depuis la 1.7.0 dans le fichier doc de virtualenv, mais je l'ai trouvée ne fonctionnant pas à moins que vous ne la définissiez manuellement. Afin d'obtenir un pur venv, je suggère fortement d'activer cette option 2. Activez le nouvel env que vous avez créé
Je souhaite que cette réponse vous aide!
la source
Voici la liste de toutes les options d' installation de pip - je n'ai trouvé aucune
-E
option ' ', peut-être que la version plus ancienne l'avait. Ci-dessous, je partage une utilisation et un fonctionnement de l'anglais clairvirtualenv
pour les prochains utilisateurs SO.Tout semble bien, acceptez d'activer le
virtualenv
(foo
). Tout ce qu'il fait, c'est nous permettre d'avoir plusieurs environnements python (et différents), c'est-à-dire différentes versions de Python, ou différentes versions de Django, ou tout autre package Python - au cas où nous aurions une version précédente en production et que nous souhaitions tester la dernière version de Django avec notre application.En bref, créer et utiliser (activer) un environnement virtuel (
virtualenv
) permet d'exécuter ou de tester notre application ou de simples scripts python avec différents interpréteurs Python, par exemple Python 2.7 et 3.3 - peut être une nouvelle installation (en utilisant l'--no-site-packages
option) ou tous les packages existants / dernière configuration (en utilisant l'--system-site-packages
option). Pour l'utiliser, nous devons l'activer:$ pip install django
va l'installer dans les packages de site globaux, et obtenir de la même manière lespip freeze
noms des packages de sites globaux.tandis que dans le répertoire venv (foo), l'exécution
$ source /bin/activate
activera venv ie maintenant tout ce qui est installé avec pip ne sera installé que dans l'environnement virtuel, et ce n'est que maintenant que pip freeze ne donnera pas la liste des paquets python globaux du site. Une fois activé:(foo)
avant que le$
signe n'indique que nous utilisons un environnement python virtuel, c'est-à-dire que toute chose avec pip - install, freeze, uninstall sera limitée à ce venv, et aucun effet sur l'installation / les packages Python globaux / par défaut.la source
Mon problème était les versions
pip
etpython3
. Pour la dernière version d'django
installation,pip3
est nécessaire. Mon problème a donc été résolu après la création de l'environnement virtuel à l'aide des commandes suivantes:la source