De pip install --help
:
--user Install to the Python user install directory for your platform. Typically ~/.local/, or %APPDATA%\Python on
Windows. (See the Python documentation for site.USER_BASE for full details.)
La documentación de site.USER_BASE es un agujero de gusano aterrador de temas interesantes * NIX que no entiendo.
¿Cuál es el propósito de --user
en inglés simple? ¿Por qué sería importante instalar el paquete ~/.local/
? ¿Por qué no poner un ejecutable en algún lugar de mi $ PATH?
python
python-3.x
pip
virtualenv
Rob Truxal
fuente
fuente
import site; print site.USER_SITE
imprimir la ubicación de instalación. Para mí lo tengo/${HOME}/.local/lib/python${PY_MAJOR}.${PY_MINOR}/site-packages
./usr/local/lib/pythonX.X/dist-packages
es el directorio predeterminado para los paquetes instalados por pip . Pero si un usuario desea instalar paquetes específicos para el usuario, puede usarlos$ sudo pip3 --user install some_package
. Ese paquete no estará disponible para grupos y otras personas que accedan a ese host.Respuestas:
pip por defecto instala paquetes de Python en un directorio del sistema (como
/usr/local/lib/python3.4
). Esto requiere acceso de root.--user
hace paquetes de instalación de pip en su directorio de inicio, que no requiere privilegios especiales.fuente
--user
asegurarse de que uno no ejecute el paquete como root? (Estoy imaginando algo similar a como Wireshark / kismet / burpsuite opciones para configurar las políticas de grupo de acceso, lo que no permite todo el programa cuenta con ejecutarse como root. Es que en el camino correcto?) O es la--user
opción sólo la intención para permitir la instalación sin privilegios de root? Si ese es el caso, ¿por qué nunca lo usosudo pip install foo_package
? Nunca antes había necesitado privilegios de raíz para instalar a través de pip.--user
parámetro es sobre el aislamiento del usuario! Eso tiene un sentido ridículo de sentido. Gracias @NDEthos!pip freeze --user
?--user
se instala ensite.USER_SITE
.Para mi caso, lo fue
/Users/.../Library/Python/2.7/bin
. Así que he agregado eso a mi RUTA (en el~/.bash_profile
archivo):fuente
Otras respuestas mencionan
site.USER_SITE
dónde se colocan los paquetes de Python. Si está buscando binarios, estos entran{site.USER_BASE}/bin
.Si desea agregar este directorio a la ruta de búsqueda de su shell, use:
fuente
Sólo una advertencia:
De acuerdo con este problema ,
--user
actualmente no es válido dentro de un entorno virtualpip
, ya que la ubicación de un usuario realmente no tiene sentido para un entorno virtual.Por lo tanto, no lo use
pip install --user some_pkg
dentro de un entorno virtual , de lo contrario, el entorno virtualpip
se confundirá. Vea esta respuesta para más detalles.fuente
La mejor manera de hacerlo es instalar
virtualenv
y no requerir la--user
confusión. Obtendrá más flexibilidad y no se preocupará por golpear las diferentes versiones y proyectos de Python cada vez que instale un paquete.https://virtualenv.pypa.io/en/stable/
fuente
En macOS, la razón para usar el
--user
indicador es para asegurarnos de que no dañamos las bibliotecas en las que se basa el sistema operativo. Un enfoque conservador para muchos usuarios de macOS es evitar instalar o actualizar pip con un comando que lo requierasudo
. Por lo tanto, esto incluye instalar a/usr/local/bin
...Ref: Instalación de Python para Neovim ( https://github.com/zchee/deoplete-jedi/wiki/Setting-up-Python-for-Neovim )
No estoy del todo claro por qué instalar en
/usr/local/bin
un Mac es un riesgo dado el hecho de que el sistema solo se basa en binarios de Python en/Library/Frameworks/
y/usr/bin
. Sospecho que es porque, como se señaló anteriormente, la instalación en/usr/local/bin
requiere, losudo
que abre la puerta a cometer un error costoso con las bibliotecas del sistema. Por lo tanto, instalar en~/.local/bin
es una forma segura de evitar este riesgo.Ref: Uso de python en una Mac ( https://docs.python.org/2/using/mac.html )
Finalmente, en la medida en que hay un beneficio de instalar paquetes en
/usr/local/bin
, me pregunto si tiene sentido cambiar el propietario del directorio deroot
auser
. Esto evitaría tener que usarsudo
mientras se protege contra la realización de cambios dependientes del sistema. * ¿Es este un valor predeterminado de seguridad una reliquia de cómo los sistemas Unix se usaban con mayor frecuencia en el pasado (como servidores)? O, como mínimo, ¿es una buena forma de ir para los usuarios de Mac que no alojan un servidor?* Nota: La función de Protección de integridad del sistema (SIP) de Mac también parece proteger al usuario de cambiar las bibliotecas dependientes del sistema.
- E
fuente
Sin entornos virtuales
pip <command> --user
cambia el alcance del comando pip actual para que funcione en la ubicación de instalación del paquete de python local de la cuenta de usuario actual, en lugar de la ubicación de instalación del paquete en todo el sistema, que es el valor predeterminado.Esto solo importa en una máquina multiusuario. Todo lo que se instale en la ubicación del sistema será visible para todos los usuarios, por lo que la instalación en la ubicación del usuario mantendrá la instalación del paquete separada de otros usuarios (no lo verán y tendrían que instalarlo ellos mismos por separado para usarlo). Debido a que puede haber conflictos de versión, la instalación de un paquete con dependencias que necesitan otros paquetes puede causar problemas, por lo que es mejor no enviar todos los paquetes que un usuario determinado usa a la ubicación de instalación del sistema.
--user
ubicación es escasa o nula . Se instalará en una carpeta diferente, que puede o no necesitar agregarse a la ruta, dependiendo del paquete y de cómo se use (muchos paquetes instalan herramientas de línea de comandos que deben estar en la ruta para ejecutarse desde un shell) .--user
se prefiere usar root / sudo o requerir la instalación del administrador y afectar el entorno Python de cada usuario, excepto en los casos de paquetes generales que el administrador quiere poner a disposición de todos los usuarios de manera predeterminada.apt
, en lugar depip
.Con entornos virtuales
venv
comando en los documentos de Python VENV .La
--user
opción en un entorno venv / virtualenv activo se instalará en la ubicación de python del usuario local (igual que sin un entorno virtual).Los paquetes se instalan en el entorno virtual de forma predeterminada, pero si lo usa
--user
, lo forzará a instalarse fuera de los entornos virtuales, en el directorio de script de python de los usuarios (en Windows, esto esc:\users\<username>\appdata\roaming\python\python37\scripts
para mí con Python 3.7).Sin embargo, no podrá acceder a un sistema o instalación de usuario desde un entorno virtual (incluso si lo usó
--user
mientras estaba en un entorno virtual).Si instala un entorno virtual con el
--system-site-packages
argumento, tendrá acceso a la carpeta de script del sistema para python. Creo que esto también incluyó la carpeta de script de python del usuario, pero no estoy seguro. Sin embargo, puede haber consecuencias no deseadas por esto y no es la forma prevista de usar entornos virtuales.Ubicación del sistema Python y las carpetas de instalación del usuario local
Puede encontrar la ubicación de la carpeta de instalación del usuario para python con
python -m site --user-base
. Estoy encontrando información contradictoria en las preguntas y respuestas, la documentación y en realidad estoy usando este comando en mi PC en cuanto a cuáles son los valores predeterminados, pero están debajo del directorio de inicio del usuario (~
acceso directo en * nix, yc:\users\<username>
generalmente para Windows).Otros detalles
La
--user
opción no es válida para cada comando. Por ejemplopip uninstall
, encontrará y desinstalará paquetes donde se instalaron (en la carpeta de usuario, carpeta de entorno virtual, etc.) y la--user
opción no es válida.Las cosas instaladas con
pip install --user
se instalarán en una ubicación local que solo será vista por la cuenta de usuario actual, y no requerirá acceso de root (en * nix) o acceso de administrador (en Windows).La
--user
opción modifica todos lospip
comandos que lo aceptan para ver / operar en la carpeta de instalación del usuario, por lo que si lo usapip list --user
, solamente mostrar que los paquetes instalados conpip install --user
.fuente
pip install
sin el--user
completo. Esto instalaría los paquetes de Python en lugares que realmente deberían dejarse al administrador de paquetes del sistema (por ejemplo,apt
en Debian / Ubuntu). Es mejor no meterse con esto, esto lleva a tantos problemas. Si un paquete de Python necesita estar disponible para todos los usuarios, utilice el administrador de paquetes del sistema operativo, pero no lo hagasudo pip install ...
. Una alternativa essudo pip install --target ...
. En Windows es menos un problema.~/.local/bin directory
teóricamente se espera que esté en tu$PATH
.Según estas personas , es un error no agregarlo en el
$PATH
usosystemd
.Esta respuesta lo explica más ampliamente.
Pero incluso si su distribución incluye el
~/.local/bin
directorio al$PATH
, podría estar en la siguiente forma (dentro~/.profile
):lo que requeriría que cierre sesión y vuelva a iniciar sesión , si el directorio no estaba allí antes.
fuente