nokome
nokome

Reputation: 10314

Why is python setup.py saying invalid command 'bdist_wheel' on Travis CI?

My Python package has a setup.py which builds fine locally on Ubuntu Trusty and on a fresh Vagrant Ubuntu Trusty VM when I provision it like this:

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

But when I do the same on a 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

I get:

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'

This Why can I not create a wheel in python? is related but note I am installing wheel and upgrading setuptools.

Upvotes: 934

Views: 868234

Answers (22)

zhikun zhao
zhikun zhao

Reputation: 21

As @frmdstryr said, you can just use the following command.

pip install wheel

Upvotes: 2

As Md Habibullah
As Md Habibullah

Reputation: 361

For the project's own environment and custom setup.py file will be this way

Activate environment

python -m venv venv or python3 -m venv venv

Mac/Linux
. /venv/env/activate

Windows

.\venv\Scripts\activate

setup.py file

 install_requires=["wheel >= x.x.x",],
 extras_require={
      "dev": [" "],
 },

pip install .

Or use

pip install wheel

and finally use your command

python setup.py bdist_wheel
or
python3 setup.py bdist_wheel

Upvotes: 0

chilin
chilin

Reputation: 416

as @Philippe Remy mention, should import from setuptools

from setuptools import setup

reference: Official doc https://setuptools.pypa.io/en/latest/index.html

Upvotes: 0

Manohar Reddy Poreddy
Manohar Reddy Poreddy

Reputation: 27515

On a AWS Ubuntu 18.04 new machine, below installations are required:

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

Especially the last line is a must.
However before 3 lines might be required as prerequisites.

Upvotes: 280

frmdstryr
frmdstryr

Reputation: 21382

Had to install the wheel package. Everything was up to date but still giving the error.

pip install wheel

then

python setup.py bdist_wheel 

worked without issues.

Upvotes: 1509

Steve Andrews
Steve Andrews

Reputation: 11

I tried the pip install wheel instruction given above, but it didn't work because I was told that the requirement was already satisfied. It turned out that I was using python-3.10 and pip from my python-3.9 site packages. I finally realized that by entering python --version and pip --version and comparing the directories.

With this realization, I installed a new version of pip to go with my python-3.10, installed the wheel, and everything worked.

Upvotes: 1

Sathiya Sarathi
Sathiya Sarathi

Reputation: 439

Perhaps, your pip version is outdated. I experienced the same problem in WSL while installing modules in a newly created virtual environment. I was able to resolve it by running the following command:

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

Upvotes: 11

Ben
Ben

Reputation: 1670

If none of the above works for you, perhaps you are experiencing the same problem that I did. I was only seeing this error when attempting to install pyspark. The solution is explained in this other stackoverflow question unable to install pyspark.

I post this b/c it wasn't immediately obvious to me from the error message that my issue was stemming solely from pyspark's dependency on pypandoc and I'm hoping to save others from hours of head scratching! =)

Upvotes: 1

sodimel
sodimel

Reputation: 916

If you're using setup.cfg files, add this before the install_require part:

setup_requires =
    wheel

Example of setup.cfg project :

# 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

Upvotes: 6

Rohit.007
Rohit.007

Reputation: 3502

I did apt-get install python3-dev in my Ubuntu and added setup_requires=["wheel"] in setup.py

Upvotes: 9

Philippe Remy
Philippe Remy

Reputation: 3153

In your setup.py, if you have:

from distutils.core import setup

Then, change it to

from setuptools import setup

Then re-create your virtualenv and re-run the command, and it should work.

Upvotes: 24

wynemo
wynemo

Reputation: 2323

in my case, the version of wheel/pip/setuptools created by venv is too old. this works:

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

Upvotes: 48

Dmitri Zaitsev
Dmitri Zaitsev

Reputation: 14056

Not related to Travis CI but I ran into similar problem trying to install jupyter on my Mac OSX 10.8.5, and none of the other answers was of help. The problem was caused by building the "wheel" for the package called pyzmq, with error messages filling hundreds of pages.

The solution I found was to directly install an older version of that package:

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

After that, the installation of jupyter succeded without errors.

Upvotes: 1

Christian Berendt
Christian Berendt

Reputation: 1935

Using Ubuntu 18.04 this problem can be resolved by installing the python3-wheelpackage.

Usually this is installed as a dependency on any Python package. But especially when building container images you often work with --no-install-recommends and therefore it is often missing and has to be installed manually first.

Upvotes: 1

Sergey Solovyev
Sergey Solovyev

Reputation: 31

It helped me to follow instructions in here:

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

Upvotes: 3

Shubham Laddha
Shubham Laddha

Reputation: 69

Try modifying the setup.py file by importing setup from setuptools instead of distutils.core

Upvotes: 6

Nathaniel Gentile
Nathaniel Gentile

Reputation: 1803

pip install wheel

worked for me, but you can also add this

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

to setup.py and save yourself a pip install command

Upvotes: 123

7029279
7029279

Reputation: 545

My fix was apt install python3-dev

Upvotes: 15

Jerther
Jerther

Reputation: 5995

I already had wheel installed so I tried to uninstall and reinstall, and it fixed the issue:

pip uninstall wheel
pip install wheel

Weird...

Upvotes: 19

Kasravnd
Kasravnd

Reputation: 107347

If you already have all the required modules installed you probably need to import the setuptools module in your setup.py file. So just add the following line at the leading of setup.py file.

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

This is also mentioned in wheel's documentation. https://wheel.readthedocs.io/en/stable/#usage

Upvotes: 72

daparic
daparic

Reputation: 4474

This error is weird as many proposed answers and got mixed solutions. I tried them, add them. It was only when I added pip install --upgrade pip finally removed the error for me. But I have no time to isolate which is which,so this is just fyi.

Upvotes: 38

nokome
nokome

Reputation: 10314

This problem is due to:

  • an old version of pip (6.1.1) being installed for Python 2.7
  • multiple copies of Python 2.7 installed on the Trusty Beta image
  • a different location for Python 2.7 being used for sudo

It's all a bit complicated and better explained here https://github.com/travis-ci/travis-ci/issues/4989.

My solution was to install with user travis instead of sudo:

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

Upvotes: 56

Related Questions