No se pudo encontrar una versión que cumpla con el requisito <paquete>
Estoy instalando varios paquetes de Python en Ubuntu 12.04 usando el siguiente requirements.txt
archivo:
numpy>=1.8.2,<2.0.0
matplotlib>=1.3.1,<2.0.0
scipy>=0.14.0,<1.0.0
astroML>=0.2,<1.0
scikit-learn>=0.14.1,<1.0.0
rpy2>=2.4.3,<3.0.0
y estos dos comandos:
$ pip install --download=/tmp -r requirements.txt
$ pip install --user --no-index --find-links=/tmp -r requirements.txt
(el primero descarga los paquetes y el segundo los instala).
El proceso se detiene frecuentemente con el error:
Could not find a version that satisfies the requirement <package> (from matplotlib<2.0.0,>=1.3.1->-r requirements.txt (line 2)) (from versions: )
No matching distribution found for <package> (from matplotlib<2.0.0,>=1.3.1->-r requirements.txt (line 2))
que soluciono manualmente con:
pip install --user <package>
y luego ejecute el segundo pip install
comando nuevamente.
Pero eso sólo funciona para ese paquete en particular. Cuando ejecuto el segundo pip install
comando nuevamente, el proceso se detiene ahora quejándose de otro paquete requerido y necesito repetir el proceso nuevamente, es decir: instalar el nuevo paquete requerido manualmente (con el comando anterior) y luego ejecutar el segundo pip install
comando.
Hasta ahora he tenido que instalar manualmente six
, pytz
, nose
y ahora me quejo de que necesito mock
.
¿Hay alguna manera de pip
instalar automáticamente todas las dependencias necesarias para no tener que hacerlo manualmente una por una?
Agregar : Esto solo sucede en Ubuntu 12.04 por cierto. En Ubuntu 14.04, los pip install
comandos aplicados al requirements.txt
archivo funcionan sin problemas.
Aunque en realidad no responde a esta pregunta específica. Otros recibieron el mismo mensaje de error con este error.
Para aquellos a quienes les gusta, sus iniciales olvidaron -r
: usar pip install -r requirements.txt
es -r
esencial para el comando.
La respuesta original:
https://stackoverflow.com/a/42876654/10093070
Había instalado python3 pero mi python /usr/bin/python
todavía era la versión anterior 2.7
Esto funcionó ( <pkg>
fue pyserial
en mi caso):
python3 -m pip install <pkg>
Este enfoque (tener todas las dependencias en un directorio y no descargar desde un índice) solo funciona cuando el directorio contiene todos los paquetes. Por lo tanto, el directorio debe contener todas las dependencias pero también todos los paquetes de los que dependen esas dependencias (p. ej. six
, pytz
etc.).
Por lo tanto, debe incluirlos manualmente requirements.txt
(para que el primer paso los descargue explícitamente) o debe instalar todos los paquetes usando PyPI y luego pip freeze > requirements.txt
almacenar la lista de todos los paquetes necesarios.
Solo un recordatorio para quién busque en Google este error y venga aquí.
Digamos que recibo este error:
$ python3 example.py
Traceback (most recent call last):
File "example.py", line 7, in <module>
import aalib
ModuleNotFoundError: No module named 'aalib'
Como menciona aalib
, se me ocurrió intentar aalib
:
$ python3.8 -m pip install aalib
ERROR: Could not find a version that satisfies the requirement aalib (from versions: none)
ERROR: No matching distribution found for aalib
Pero en realidad es un nombre de paquete incorrecto , asegúrese pip search
( servicio deshabilitado al momento de escribir este artículo), o busque en Google o en el sitio pypi para obtener el nombre exacto del paquete :
Luego instale exitosamente:
$ python3.8 -m pip install python-aalib
Collecting python-aalib
Downloading python-aalib-0.3.2.tar.gz (14 kB)
...
Como pip --help
se dijo:
$ python3.8 -m pip --help
...
-v, --verbose Give more output. Option is additive, and can be used up to 3 times.
Para tener una forma sistemática de descubrir las causas fundamentales en lugar de confiar en la suerte, puede agregar -vvv
la opción de pip
comando para ver los detalles, por ejemplo:
$ python3.8 -u -m pip install aalib -vvv
User install by explicit request
Created temporary directory: /tmp/pip-ephem-wheel-cache-b3ghm9eb
Created temporary directory: /tmp/pip-req-tracker-ygwnj94r
Initialized build tracking at /tmp/pip-req-tracker-ygwnj94r
Created build tracker: /tmp/pip-req-tracker-ygwnj94r
Entered build tracker: /tmp/pip-req-tracker-ygwnj94r
Created temporary directory: /tmp/pip-install-jfurrdbb
1 location(s) to search for versions of aalib:
* https://pypi.org/simple/aalib/
Fetching project page and analyzing links: https://pypi.org/simple/aalib/
Getting page https://pypi.org/simple/aalib/
Found index url https://pypi.org/simple
Getting credentials from keyring for https://pypi.org/simple
Getting credentials from keyring for pypi.org
Looking up "https://pypi.org/simple/aalib/" in the cache
Request header has "max_age" as 0, cache bypassed
Starting new HTTPS connection (1): pypi.org:443
https://pypi.org:443 "GET /simple/aalib/ HTTP/1.1" 404 13
[hole] Status code 404 not in (200, 203, 300, 301)
Could not fetch URL https://pypi.org/simple/aalib/: 404 Client Error: Not Found for url: https://pypi.org/simple/aalib/ - skipping
Given no hashes to check 0 links for project 'aalib': discarding no candidates
ERROR: Could not find a version that satisfies the requirement aalib (from versions: none)
Cleaning up...
Removed build tracker: '/tmp/pip-req-tracker-ygwnj94r'
ERROR: No matching distribution found for aalib
Exception information:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/pip/_internal/cli/base_command.py", line 186, in _main
status = self.run(options, args)
File "/usr/lib/python3/dist-packages/pip/_internal/commands/install.py", line 357, in run
resolver.resolve(requirement_set)
File "/usr/lib/python3/dist-packages/pip/_internal/legacy_resolve.py", line 177, in resolve
discovered_reqs.extend(self._resolve_one(requirement_set, req))
File "/usr/lib/python3/dist-packages/pip/_internal/legacy_resolve.py", line 333, in _resolve_one
abstract_dist = self._get_abstract_dist_for(req_to_install)
File "/usr/lib/python3/dist-packages/pip/_internal/legacy_resolve.py", line 281, in _get_abstract_dist_for
req.populate_link(self.finder, upgrade_allowed, require_hashes)
File "/usr/lib/python3/dist-packages/pip/_internal/req/req_install.py", line 249, in populate_link
self.link = finder.find_requirement(self, upgrade)
File "/usr/lib/python3/dist-packages/pip/_internal/index/package_finder.py", line 926, in find_requirement
raise DistributionNotFound(
pip._internal.exceptions.DistributionNotFound: No matching distribution found for aalib
Del registro anterior, es bastante obvio que la URL https://pypi.org/simple/aalib/
404 no se encontró. Entonces podrás adivinar las posibles razones que causan ese 404, es decir, un nombre de paquete incorrecto. Otra cosa es que puedo modificar archivos Python relevantes de módulos pip para depurarlos aún más con el registro anterior. Para editar .whl
el archivo, puede usar wheel
el comando to unpack
ypack
.