Tenía la impresión de que virtualenv --no-site-packages
crearía un entorno Python completamente separado y aislado, pero no parece.
Por ejemplo, tengo python-django instalado globalmente, pero deseo crear un virtualenv con una versión diferente 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
Por lo que puedo decir, pip -E foo install
se supone que lo anterior reinstala una nueva versión de Django. Además, si le digo a pip que congele el medio ambiente, obtengo muchos paquetes. Esperaría que para un ambiente fresco con --no-site-packages
esto estaría en blanco?
$ 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 ...
¿Estoy malentendido cómo --no-site-packages
se supone que funciona?
python
virtualenv
pip
ianw
fuente
fuente
--no-site-packages
está DEPRECADO. Retenido solo por compatibilidad con versiones anteriores. No tener acceso a los paquetes globales del sitio es ahora el comportamiento predeterminado . Si desea acceder a paquetes de sitio globales, puede habilitarlo--system-site-packages
.Respuestas:
Tuve un problema como este, hasta que me di cuenta de que (mucho antes de haber descubierto virtualenv), había ido agregando directorios a PYTHONPATH en mi archivo .bashrc. Como había pasado más de un año antes, no pensé en eso de inmediato.
fuente
--no-site-packages
al trabajo. Me estoy acercando a simplemente borrar ubuntu y ver si eso soluciona las cosas. Al principio pensé que estaba teniendo el mismo problema de PYTHONPATH, pero al correrprintenv
, no puedo verlo. La frustración está aumentando, y cualquier ayuda es muy apreciada. Mi sys.path desde un venv creado con--no-site-packages
parece incluir todos mis directorios de paquetes. No tengo la mejor forma de modificar esto. ¿Ayuda?PATH
variable global si también encuentra ejecutables desde fuera de virtualenv.Debe asegurarse de ejecutar el
pip
binario en el entorno virtual que creó, no el global.Ver una prueba:
Creamos el virtualenv con la
--no-site-packages
opción:Verificamos la salida del
freeze
recién creadopip
:Pero si usamos lo global
pip
, esto es lo que obtenemos:Es decir, todos los paquetes que se
pip
han instalado en todo el sistema. Al marcarwhich pip
, obtenemos (al menos en mi caso) algo así/usr/local/bin/pip
, lo que significa que cuando lo hacemos llamamospip freeze
a este binario en lugar demytest/bin/pip
.fuente
pip
a una ruta específica al pip global, que no se anulaba al activar el virtualenv.Finalmente descubrí que, por cualquier razón, pip -E no funcionaba. Sin embargo, si realmente activo el virtualenv, y uso easy_install proporcionado por virtualenv para instalar pip, luego uso pip directamente desde adentro, parece funcionar como se esperaba y solo muestra los paquetes en virtualenv
fuente
Sé que esta es una pregunta muy antigua, pero para aquellos que llegan aquí en busca de una solución:
No olvides activar virtualenv (
source bin/activate
) antes de ejecutarpip freeze
. De lo contrario, obtendrá una lista de todos los paquetes globales.fuente
Borre temporalmente el
PYTHONPATH
con:Luego cree y active el entorno virtual:
Sólo entonces:
fuente
--no-site-packages
debería, como su nombre lo indica, eliminar el directorio estándar de paquetes de sitio desys.path
. Cualquier otra cosa que viva en la ruta estándar de Python permanecerá allí.fuente
PYTHONPATH
conexport PYTHONPATH=
parecía hacer el truco.Un problema similar puede ocurrir en Windows si llama scripts directamente, ya
script.py
que luego usa el abridor predeterminado de Windows y abre Python fuera del entorno virtual. Llamarlo conpython script.py
utilizará Python con el entorno virtual.fuente
Esto también parece suceder cuando mueve el directorio virtualenv a otro directorio (en Linux) o cambia el nombre de un directorio padre.
fuente
Estaba teniendo este mismo problema. El problema para mí (en Ubuntu) fue que mi nombre de ruta contenía
$
. Cuando creé un virtualenv fuera del $ dir, funcionó bien.Extraño.
fuente
Una de las posibles razones por las que virtualenv pip no funcionará es si alguna de las carpetas principales tenía espacio en su nombre para
/Documents/project name/app
cambiar el nombre y/Documents/projectName/app
resolver el problema.fuente
Encontré el mismo problema donde pip en venv todavía funciona como pip global.
Después de buscar muchas páginas, lo descubro de esta manera.
1. Cree un nuevo venv por virtualenv con la opción "--no-site-packages"
tenga en cuenta que aunque la opción "--no-site-packages" era verdadera por defecto desde 1.7.0 en el archivo doc de virtualenv, pero descubrí que no funciona a menos que la configure manualmente. Para obtener un venv puro, le recomiendo activar esta opción 2. Active el nuevo entorno que creó
¡Deseo que esta respuesta te ayude!
fuente
Aquí está la lista de todas las opciones de instalación de pip : no encontré ninguna
-E
opción ' ', puede ser una versión anterior. A continuación, comparto un uso sencillo del inglés y trabajovirtualenv
para los próximos usuarios de SO.Todo parece estar bien, acepta activar el
virtualenv
(foo
). Todo lo que hace es permitirnos tener un entorno de Python múltiple (y variable), es decir, varias versiones de Python, o varias versiones de Django, o cualquier otro paquete de Python, en caso de que tengamos una versión anterior en producción y queramos probar la última versión de Django con nuestro solicitud.En resumen, la creación y el uso (activación) del entorno virtual (
virtualenv
) permite ejecutar o probar nuestra aplicación o scripts simples de Python con diferentes intérpretes de Python, es decir, Python 2.7 y 3.3: puede ser una instalación nueva (usando la--no-site-packages
opción) o todos los paquetes de los existentes / última configuración (usando la--system-site-packages
opción). Para usarlo tenemos que activarlo:$ pip install django
lo instalará en los paquetes globales del sitio y, de manera similar, obtendrá lospip freeze
nombres de los paquetes globales del sitio.mientras que dentro del directorio venv (foo) la ejecución
$ source /bin/activate
activará venv, es decir, ahora todo lo que esté instalado con pip solo se instalará en el entorno virtual, y solo ahora el congelamiento de pip no dará la lista de paquetes globales de paquetes de sitios en Python. Una vez activado:(foo)
antes de que el$
letrero indique que estamos utilizando un entorno virtual de Python, es decir, cualquier cosa con instalación de pip, congelación, desinstalación se limitará a este venv, y no tendrá efecto en la instalación / paquetes globales / predeterminados de Python.fuente