Considere el escenario habitual: quiero crear un entorno virtual e instalar algunos paquetes. Decir
python3 -m venv venv source venv/bin/activate pip install databricks-cliDurante la instalación, me sale un error.
Building wheels for collected packages: databricks-cli Building wheel for databricks-cli (setup.py) ... error ERROR: Command errored out with exit status 1: command: /home/paulius/Documents/wheeltest/venv/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-m7jmyh1m/databricks-cli/setup.py'"'"'; __file__='"'"'/tmp/pip-install-m7jmyh1m/databricks-cli/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-maxix98x cwd: /tmp/pip-install-m7jmyh1m/databricks-cli/ Complete output (8 lines): /tmp/pip-install-m7jmyh1m/databricks-cli/setup.py:24: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses import imp usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...] or: setup.py --help [cmd1 cmd2 ...] or: setup.py --help-commands or: setup.py cmd --help error: invalid command 'bdist_wheel' ---------------------------------------- ERROR: Failed building wheel for databricks-cliSi bien es benigno (la instalación realmente funciona), sigue siendo molesto.
Sé que la pip install wheel resuelve esto, pero wheel no viene con el entorno virtual de forma predeterminada. Entonces, ¿debería agregarlo siempre a mis requisitos.txt, o tal vez esto es algo que puede resolver el mantenedor del paquete (en este caso databricks-cli ) y, por lo tanto, debería abrir un problema en su Github?
Actualización: tenga en cuenta que la wheel no es necesaria para instalar ruedas, en este ejemplo, un montón de dependencias se descargan e instalan con éxito como ruedas. El único paquete databricks-cli recibe el error, ya que no tiene una rueda, pero por alguna razón, pip intenta construirlo.
Actualización 3:
Para evitarlo desde la perspectiva del mantenedor, use:
setup_requires=["wheel"] parece que está en Linux y usa Python preinstalado o modificado y sus setuptools .
Experimenté lo mismo debido a que Debian cortó partes de los paquetes de una manera no muy sensata y principalmente tuve problemas con las python-setuptools y me gusta. Compruebe si la versión coincide y, si no, instale las herramientas de configuración desde pip, eso podría ayudar en el futuro.
Tengo setuptools 45.2.0 y no tuve problemas para instalar el paquete como una rueda. Luego desinstalé la rueda y solté el directorio de caché y lo instalé correctamente incluso desde la fuente tar.gz
Actualización 2:
Podría o no resolverse requiriendo un paquete de wheel . Si setup.py espera que bdist_wheel esté presente antes de la instalación (lo más probable), agregarlo a la función setup() no ayudará y una verificación manual del paquete dentro del script de configuración (+ quizás una referencia en README) son necesario para que un usuario final pueda instalarlo correctamente.
Por ejemplo, si no está presente en el sistema, simplemente imprima una advertencia y llame a exit() . Eso sería lo mínimo que debería hacer un mantenedor.
Actualizar:
Sí, en el caso de que falte el comando bdist_wheel , debe instalar la rueda con pip instal wheel .
No es obligatorio, pero es recomendable. Pip funcionará bien sin ruedas, pero lo instalarás desde la fuente ( tar.gz , .zip o .egg ).
Consulte la discusión del empaque para saber si usar rueda o huevo (o fuente).
Este fue un error de pip, y la solución es actualizar el pip. Con la versión más nueva, las cosas se ven bien:
(venv) paulius@xps:~/Documents/wheeltest$ pip install databricks-cli Collecting databricks-cli Using cached databricks-cli-0.14.3.tar.gz (54 kB) Collecting click>=6.7 Using cached click-8.0.1-py3-none-any.whl (97 kB) Collecting requests>=2.17.3 Using cached requests-2.26.0-py2.py3-none-any.whl (62 kB) Collecting six>=1.10.0 Using cached six-1.16.0-py2.py3-none-any.whl (11 kB) Collecting tabulate>=0.7.7 Using cached tabulate-0.8.9-py3-none-any.whl (25 kB) Collecting idna<4,>=2.5 Using cached idna-3.2-py3-none-any.whl (59 kB) Collecting certifi>=2017.4.17 Using cached certifi-2021.5.30-py2.py3-none-any.whl (145 kB) Collecting urllib3<1.27,>=1.21.1 Using cached urllib3-1.26.6-py2.py3-none-any.whl (138 kB) Collecting charset-normalizer~=2.0.0 Using cached charset_normalizer-2.0.1-py3-none-any.whl (35 kB) Using legacy 'setup.py install' for databricks-cli, since package 'wheel' is not installed. Installing collected packages: urllib3, idna, charset-normalizer, certifi, tabulate, six, requests, click, databricks-cli Running setup.py install for databricks-cli ... done Successfully installed certifi-2021.5.30 charset-normalizer-2.0.1 click-8.0.1 databricks-cli-0.14.3 idna-3.2 requests-2.26.0 six-1.16.0 tabulate-0.8.9 urllib3-1.26.6 Tenga en cuenta la línea Using legacy 'setup.py install' ... .
Este es un problema relacionado en pip github https://github.com/pypa/pip/issues/8302 . No exactamente eso, pero hay una explicación en los comentarios sobre cuál es la lógica de construcción de la rueda.