python install wheel leads to import error

Viewed 3308

I'd like to make a wheel binary distribution, intstall it and then import it in python. My steps are

  • I first create the wheel: python ./my_package/setup.py bdist_wheel
  • I install the wheel: pip install ./dist/*.whl
  • I try to import the package: python -c"import my_package"

This leads to the error: ImportError: No module named 'my_package'

Also, when I do pip list, the my_package is listed. However, when I run which my_packge, nothing is shown.

When I run pip install ./my_package/ everything works as expected.

How would I correctly build and install a wheel?

python version 3.5 pip version 10.1 wheel version 0.31.1

UPDATE:

When I look at the files inside my_package-1.0.0.dist-info, there is an unexpected entry in top_level.txt. It is the name of the folder where I ran python ./my_package/setup.py bdist_wheel in. I believe my setup.py is broken.

UPDATE WITH REGARDS TO ACCEPTED ANSWER: I accepted the answer below. Yet, I think it is better to simply cd into the package directory. Changing to a different directory as suggested below leads to unexpected behavior when using the -d flag, i.e. the target directory where to save the wheel. This would be relative to the directory specified in the setup.py file.

4 Answers

I had the very same error, but it was due to my setup.py not specifying the entry "packages=setuptools.find_packages()". Everythings builds nicely without that but you can't import anything even though pip shows it to be installed.

If you need to execute the setup script from another directory, ensure you are entering the project dir in the script.

from setuptools import setup

root = os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir))
os.chdir(root)

# or using pathlib (Python>=3.4):
import patlib
root = pathlib.Path(__file__).parent
os.chdir(str(root))

setup(...)

In my case, in order to solve it I just had to upgrade pip (since Docker installed pip 9).

python3 -m pip install --upgrade pip

I have experienced the same situation, maybe not for the same reason, here just for reference. The package name should not contain the dash "-", there's no error pop out, but after installing your wheel, though it is shown in pip list, you can't find that package.

/src/your-package-name # should not

/src/your_package_name # should like this

In the setup.py, you can use the name with dash "-" without limitation:

setuptools.setup(
name="instrument-lab",
...
Related