La ejecución de pip install en un entorno virtual intenta instalar paquetes en el directorio predeterminado de Python
Estoy intentando instalar módulos para Python en mi raspberry pi 5 en un entorno virtual pero solo dice que el entorno se administra externamente.
Comencé activando el entorno virtual e intentando instalar el paquete que necesitaba, pero me decía que el entorno estaba administrado externamente.
clock@system-time:/clock $ source .venv/bin/activate
(.venv) clock@system-time:/clock $ sudo python3 -m pip install inputimeout
error: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
python3-xyz, where xyz is the package you are trying to
install.
If you wish to install a non-Debian-packaged Python package,
create a virtual environment using python3 -m venv path/to/venv.
Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
sure you have python3-full installed.
For more information visit http://rptl.io/venv
note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.
Verifiqué qué pip y python estaba usando y era el del entorno virtual.
(.venv) clock@system-time:/clock $ which pip
/clock/.venv/bin/pip
(.venv) clock@system-time:/clock $ which python
/clock/.venv/bin/python
Así que intenté usarlo --break-system-packages
porque pensé que tal vez algo andaba mal. Descargó e instaló el paquete.
(.venv) clock@system-time:/clock $ sudo python3 -m pip install inputimeout --break-system-packages
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting inputimeout
Downloading inputimeout-1.0.4-py3-none-any.whl (4.6 kB)
Installing collected packages: inputimeout
Successfully installed inputimeout-1.0.4
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
Luego intenté verificar mi lista de paquetes instalados y no estaba allí.
(.venv) clock@system-time:/clock $ pip list
Package Version
---------- -------
pip 23.0.1
setuptools 66.1.1
Así que salí y verifiqué la lista de la instalación predeterminada de Python y estaba allí.
(.venv) clock@system-time:/clock $ deactivate
clock@system-time:/clock $ pip list
Package Version
---------------------------------- ----------
arandr 0.1.11
asgiref 3.6.0
astroid 2.14.2
asttokens 2.2.1
av 10.0.0
Babel 2.10.3
beautifulsoup4 4.11.2
blinker 1.5
certifi 2022.9.24
chardet 5.1.0
charset-normalizer 3.0.1
click 8.1.3
colorama 0.4.6
colorzero 2.0
cryptography 38.0.4
cupshelpers 1.0
dbus-python 1.3.2
dill 0.3.6
distro 1.8.0
docutils 0.19
executing 2.0.1
Flask 2.2.2
gpiozero 2.0
html5lib 1.1
icecream 2.1.3
idna 3.3
importlib-metadata 4.12.0
inputimeout 1.0.4
...
También intenté seguir esto pero tampoco funcionó.
sudo
ejecuta un nuevo root
shell que no tiene idea de la configuración actual de su shell (incluido qué entorno virtual está activo).
Absolutamente no lo use sudo
si desea instalar cosas en el entorno virtual propiedad del usuario actualmente activo.
De todos modos, el único propósito de tener un entorno virtual es que usted mismo lo controle completamente; por lo que no necesita root
privilegios para modificarlo (y si de alguna manera lo logra, crear root
archivos de propiedad allí lo arruinaría, porque entonces ya no podrá cambiar esos archivos sin volver a hacerlo root
).