【问题标题】:Why is python setup.py saying invalid command 'bdist_wheel' on Travis CI?为什么 python setup.py 在 Travis CI 上说无效命令“bdist_wheel”?
【发布时间】:2016-04-21 12:40:35
【问题描述】:

我的 Python 包有一个 setup.py,当我像这样配置它时,它可以在 Ubuntu Trusty 和新的 Vagrant Ubuntu Trusty VM 上本地构建:

sudo apt-get install python python-dev --force-yes --assume-yes --fix-broken
curl --silent --show-error --retry 5 https://bootstrap.pypa.io/get-pip.py | sudo python2.7
sudo -H pip install setuptools wheel virtualenv --upgrade

但是当我在 Travis CI Trusty Beta VM 上执行相同操作时:

- sudo apt-get install python python-dev --force-yes --assume-yes --fix-broken
- curl --silent --show-error --retry 5 https://bootstrap.pypa.io/get-pip.py | sudo python2.7
- sudo -H pip install setuptools wheel virtualenv --upgrade

我明白了:

python2.7 setup.py bdist_wheel
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'

这个Why can I not create a wheel in python? 是相关的,但请注意我正在安装wheel 并升级setuptools。

【问题讨论】:

    标签: python travis-ci setup.py pypi


    【解决方案1】:

    必须安装wheel 包。一切都是最新的,但仍然出现错误。

    pip install wheel
    

    然后

    python setup.py bdist_wheel 
    

    工作没有问题。

    【讨论】:

    • 我需要pip3 install wheel - 因为我已经为pip 安装了轮子,但不是pip3
    • 这有效,但在pip install wheel 之后我不得不pip uninstall -r requirements.txt 并重做pip install -r requirements.txt
    • can't open file 'setup.py': [Errno 2] No such file or directory
    • @Cerin pip install wheel 就足够了。
    • 有没有办法在干净的虚拟环境中自动安装wheelpython3 -m venv --system-site-packages 会添加太多包。
    【解决方案2】:

    在 AWS Ubuntu 18.04 new machine 上,需要进行以下安装:

    sudo apt-get install gcc libpq-dev -y
    sudo apt-get install python-dev  python-pip -y
    sudo apt-get install python3-dev python3-pip python3-venv python3-wheel -y
    pip3 install wheel
    

    尤其是最后一行是必须的。
    但是,可能需要在 3 行之前作为先决条件。

    【讨论】:

    • 我在 Docker 映像 (DL3015) 中使用 --no-install-recommends 并遇到此错误,我需要显式安装 python3-wheel。谢谢!
    • 最后一行应该是空操作,因为已经安装了轮子。你是用--upgrade 运行它的吗?如果有人能够从 Ubuntu 18.04 开始创建一个最小的 Dockerfile,那将是黄金标准。
    • 我还必须安装 sudo apt install build-essential ,因为我对 pip3 install shap 也有同样的问题。然后就可以了!
    • 我对虚拟环境中的pip3 install wheel 确实有意义。但是,使用 apt-get 在系统范围内安装它,然后使用 pip 覆盖它不会。还是有更多的东西?
    • @ManoharReddyPoreddy 我不认为这是由工具所有者引起的,而是由 ubuntu 包维护者引起的。 bdist_wheellisted 作为 wheel 包的入口点。所以安装它应该把命令放在你的路径中。但是 ubuntu 包 python3-wheel 没有包含 /usr/bin/bdist_wheel 或任何入口点。此处列出的文件:packages.ubuntu.com/focal/all/python3-wheel/filelist
    【解决方案3】:
    pip install wheel
    

    为我工作,但你也可以添加这个

    setup(
        ...
        setup_requires=['wheel']
    )
    

    到 setup.py 并为自己保存一个 pip install 命令

    【讨论】:

    • 那些已经安装了轮子但仍然出现错误的人可以添加setup_requires=['wheel']来摆脱这个错误
    • 这不能按预期工作:1 - 起初它只是因为我们用 pip 安装了wheel。它会在全新安装中再次失败 2 - documentation 说“注意:setup_requires 中列出的项目不会自动安装在运行安装脚本的系统上。”
    • 不仅如此,@TobiasSette,而且相同的文档链接说:“警告使用 setup_requires 不鼓励使用 PEP-518。”
    • @JeffWright 可能会气馁,但这是我可以在我专门卸载 wheel 进行测试的虚拟环境中运行 python setup.py bdist_wheel --universal 的唯一方法。我相信setup_requires 会触发easy_install 来抓取wheel,这会导致它不会出现在pip list 中,但您可以在.eggs 文件夹中看到它。由于这是本地唯一的 wheel 副本,如果您不能 pip install wheel 或遇到 pip install --user wheel 的问题,它会很有用。
    • 如何安装 setup_requires?使用python setup.py bdist_wheel ?
    【解决方案4】:

    如果您已经安装了所有必需的模块,您可能需要在您的setup.py 文件中导入setuptools 模块。因此,只需在setup.py 文件的开头添加以下行。

    import setuptools
    from distutils.core import setup
    # other imports and setups
    

    wheel 的文档中也提到了这一点。 https://wheel.readthedocs.io/en/stable/#usage

    【讨论】:

    • 这对我有用。我使用 distutils 而不是 setuptools 进行设置,并且我已经安装了 wheel 包。
    【解决方案5】:

    这个问题是由于:

    • 正在为 Python 2.7 安装旧版本的 pip (6.1.1)
    • 在 Trusty Beta 映像上安装了多个 Python 2.7 副本
    • Python 2.7 的不同位置用于sudo

    这有点复杂,在这里https://github.com/travis-ci/travis-ci/issues/4989解释得更好。

    我的解决方案是使用用户 travis 而不是 sudo 安装:

    - pip2.7 install --upgrade --user travis pip setuptools wheel virtualenv
    

    【讨论】:

    • 就我而言,sudo -H pip install setuptools --upgrade 解决了这个问题。
    • @MartinThoma 感谢您的提示。发出sudo -H pip install wheel --upgrade 后它对我有用
    • 在我的情况下升级 pip 就足够了,从 9.0.1 升级到 20.0.2
    【解决方案6】:

    在我的例子中,由 venv 创建的 wheel/pip/setuptools 版本太旧了。 这行得通:

    venv/bin/pip  install --upgrade pip wheel setuptools
    

    【讨论】:

      【解决方案7】:

      这个错误很奇怪,因为许多提出的答案和不同的解决方案。我试过了,添加它们。只有当我添加pip install --upgrade pip 时,才终于为我消除了错误。但是我没有时间隔离哪个是哪个,所以这只是供参考。

      【讨论】:

        【解决方案8】:

        在您的setup.py 中,如果您有:

        from distutils.core import setup
        

        然后,改成

        from setuptools import setup
        

        然后重新创建你的 virtualenv 并重新运行命令,它应该可以工作了。

        【讨论】:

        • 这解决了我的问题。谢谢你。 +1
        • 这应该是答案。谢谢
        【解决方案9】:

        我已经安装了wheel,所以我尝试卸载并重新安装,它解决了这个问题:

        pip uninstall wheel
        pip install wheel
        

        奇怪...

        【讨论】:

        • FWIW 我刚遇到这个错误,卸载和重新安装对我有用
        • 我从激活的 virtualenv 中运行 pip install wheel 并修复了它,但在删除并重新创建 virtualenv 后修复仍然存在,这没有任何意义。我本来预计 pip install wheel 的任何影响都会随着 virtualenv 消失。
        【解决方案10】:

        我的修复是apt install python3-dev

        【讨论】:

        • 是的,并将setup_requires=["wheel"] 添加到您的 setup.py
        【解决方案11】:

        也许,您的 pip 版本已过时。在新创建的虚拟环境中安装模块时,我在 WSL 中遇到了同样的问题。我可以通过运行以下命令来解决它:

        $ ./bin/python3 -m pip install --upgrade pip 
        

        【讨论】:

          【解决方案12】:

          我在我的 Ubuntu 中添加了 apt-get install python3-dev 并在 setup.py 中添加了 setup_requires=["wheel"]

          【讨论】:

          • 运行pip install wheel可能就足够了。
          • setup.py 应该在哪里?换句话说:哪个setup.py
          【解决方案13】:

          尝试通过从 setuptools 而不是 distutils.core 导入 setup 来修改 setup.py 文件

          【讨论】:

          • 为我工作!我正在将一个包从 Python2 迁移到 Python3,不幸的是找不到相关指南。任何人都在做同样的事情并对这个问题感到沮丧,这可能会为您解决!
          【解决方案14】:

          如果您使用的是 setup.cfg 文件,请在 install_require 部分之前添加:

          setup_requires =
              wheel
          

          setup.cfg 项目示例:

          # setup.py
          from setuptools import setup
          
          setup()
          
          # setup.cfg
          [metadata]
          name = name
          version = 0.0.1
          description = desc
          long_description = file: README.md
          long_description_content_type = text/markdown
          url = url
          author = author
          classifiers =
              Programming Language :: Python
              Programming Language :: Python :: 3
          
          [options]
          include_package_data = true
          packages = find:
          setup_requires =
              wheel
          install_requires =
              packages
              packages
              packages
          

          【讨论】:

            【解决方案15】:

            它帮助我按照这里的说明进行操作:

            https://packaging.python.org/guides/installing-using-linux-tools/

            Debian/Ubuntu

            Python 2:

            sudo apt install python-pip
            

            Python 3:

            sudo apt install python3-venv python3-pip
            

            【讨论】:

            • 这对我有用。首先 sudo apt install python3-venv python3-pip 然后 pip3 install wheel
            【解决方案16】:

            方法一:更新pip

            python3 -m pip install --upgrade pip
            

            方法2:必须安装wheel包

            pip install wheel
            python setup.py bdist_wheel 
            

            获取更多解决方案,exerrorgithub

            【讨论】:

              【解决方案17】:

              使用 Ubuntu 18.04 可以通过安装 python3-wheelpackage 解决此问题。

              通常这是作为对任何 Python 包的依赖项安装的。但尤其是在构建容器镜像时,您经常使用--no-install-recommends,因此它经常丢失,必须先手动安装。

              【讨论】:

                【解决方案18】:

                如果上述方法都不适合您,那么您可能遇到了与我相同的问题。我只在尝试安装 pyspark 时看到此错误。该解决方案在另一个 stackoverflow 问题unable to install pyspark 中进行了解释。

                我发布了这个 b/c,从错误消息中我并没有立即明显看出我的问题完全源于 pysparkpypandoc 的依赖,我希望能将其他人从数小时的头脑中拯救出来抓挠! =)

                【讨论】:

                  【解决方案19】:

                  与 Travis CI 无关,但 我在我的 Mac OSX 10.8.5 上安装 jupyter 时遇到了类似的问题,其他答案都没有帮助。问题是由为名为@9​​87654322@ 的包构建“轮子”引起的,错误消息填满了数百页。

                  我找到的解决方案是直接安装该软件包的旧版本:

                  python -m pip install pyzmq==17 --user
                  

                  之后,jupyter 的安装成功,没有错误。

                  【讨论】:

                    【解决方案20】:

                    我尝试了上面给出的pip install wheel 指令,但它不起作用,因为我被告知要求已经满足。原来我使用的是 python-3.10 和我的 python-3.9 站点包中的 pip。通过输入python --versionpip --version 并比较目录,我终于意识到了这一点。

                    有了这个认识,我安装了一个新版本的 pip 来配合我的 python-3.10,安装了轮子,一切正常。

                    【讨论】:

                      猜你喜欢
                      • 2018-10-02
                      • 2018-12-07
                      • 2020-08-02
                      • 2023-03-05
                      • 2019-05-10
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多