Pour moi qui étais confus parce que sudo python ne fonctionnait pas lors de l'utilisation de virtualenv

Environnement de vérification de fonctionnement

Qu'est-ce que virtualenv?

C'est une fonction qui vous permet de créer plusieurs environnements Python sur la même machine (OS).

--Modifier la version de Python

C'est extrêmement plus rapide que de créer à partir de zéro, et vous pouvez le faire avec seulement quelques commandes. J'ai été surpris quand je l'ai touché pour la première fois, mais c'est une fonction très conviviale pour le développement. Pouvez-vous utiliser docker? </ s>

référence virtualenv

http://cloverrose.hateblo.jp/entry/2012/10/01/235126 http://qiita.com/H-A-L/items/5d5a2ef73be8d140bdf3 http://qiita.com/Kodaira_/items/feadfef9add468e3a85b

sudo python ne fonctionne pas?

J'utilise généralement python avec Anaconda sur Windows et aussi virtualenv via la commande conda, mais Windows n'a pas la culture d'exiger sudo. Par conséquent, j'ai complètement oublié qu'il y avait quelque chose qui nécessitait sudo.

À ce moment-là, j'essayais un programme de serveur principal pour python appelé Bottle.

Jusqu'à l'installation de la bouteille


$ virtualenv --no-site-packages bottle_test
$ cd bottle_test
$ pip install bottle

Ensuite, j'ai copié l'exemple de programme sur start_server.py et j'ai essayé de l'exécuter.

tester


$ python start_server.py
   ...(Omission)...
socket.error: [Errno 13] Permission denied

Oh, c'est sudo. J'ai oublié.

Exécuter avec sudo


$ sudo python start_server.py
   ...(Omission)...
ImportError: No module named bottle

cette? Avez-vous oublié de mettre la bouteille? Est-ce stupide?

Confirmation de version


$ pip freeze
appdirs==1.4.3
bottle=0.12.13
packaging=16.8
pyparsing==2.2.0
six=1.10.0

Ah, ça? Il est installé ... pourquoi ai-je une erreur? ,,, Ah!

Cause: il n'y a pas de virtualenv disponible après la promotion lorsque sudo

sudo basculera temporairement votre répertoire personnel sur / root, et vous n'avez pas créé de virtualenv dans / root. alors. Ce que je viens de créer est le propre virtualenv de l'utilisateur connecté, pas pour root. C'était comme ça.

Correspondance? Correspondance.

Après avoir enquêté, j'ai trouvé trois façons de le gérer.

  1. Appelez python directement dans l'environnement virtuel
  2. Créez un environnement virtuel avec sudo
  3. N'écrivez pas de code qui nécessite sudo en premier lieu

Eh bien, je ne peux pas utiliser 3 pour ce que j'essaie de faire cette fois.

1. Appelez python directement dans l'environnement virtuel

Cela dépend grandement de la structure des dossiers lors de la création de l'environnement virtuel, mais par exemple, supposons que vous le créez comme suit

Créer une virtualenv


~ $ mkdir test
~ $ cd test
~/test $ virtualenv --no-site-packages testenv
~/test $ cd testenv
~/test/testenv $ source bin/activate

Dans ce cas, le chemin python utilisé par l'environnement virtuel testenv est ~ / test / testenv / bin / python.

Vous pouvez appeler cela directement avec sudo pour démarrer python avec l'environnement virtuel testenv.

Méthode d'exécution qui fonctionne comme prévu


(testenv) $ sudo ~/test/testenv/bin/python start_server.py

2. Créez un environnement virtuel avec sudo

Je n'ai pas essayé cette méthode. L'idée est simple, il semble essayer de créer un virtualenv qui peut être utilisé lorsque sudo est terminé.

Créer virtualenv avec sudo


$ sudo virtualenv venv

Dans ce cas, l'installation du package semble être la suivante.

$ sudo venv/bin/pip $PACKAGE
$ sudo sh -c ". venv/bin/activate; pip install $PACKAGE"

Référence d'exécution de sudo + virtualenv

https://askubuntu.com/questions/234758/how-to-use-a-python-virtualenv-with-sudo http://stackoverflow.com/questions/2658902/in-my-virtualenv-i-need-to-use-sudo-for-all-commands http://emilkirkegaard.dk/en/?p=5770

en conclusion

Nous avons partagé les pièges de python virtualenv. J'espère que ce sera une référence pour votre vie de développement! Eh, n'utilisez-vous pas python? Est-ce javascript principal? Je suis généralement C # main! </ s> Puis!

Recommended Posts