Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pip list shows package is installed but import package throws ImportError

Tags:

I have a package that's hosted in my VCS. I run:

$ pip install -vvv git+https://myvcs.com/myprotos

Here is the log. You'll notice it runs a custom script in the middle of installing which actually builds the source files in the project. See this question for details of what it's doing.

Collecting git+https://myvcs.com/myprotos
  Cloning https://myvcs.com/myprotos to /private/var/folders/3t/4qwkfyr903d0b7db7by2kj6r0000gn/T/pip-cFzP3I-build
  Running command git clone -q https://myvcs.com/myprotos /private/var/folders/3t/4qwkfyr903d0b7db7by2kj6r0000gn/T/pip-cFzP3I-build
  Running setup.py (path:/private/var/folders/3t/4qwkfyr903d0b7db7by2kj6r0000gn/T/pip-cFzP3I-build/setup.py) egg_info for package from git+https://myvcs.com/myprotos
    Running command python setup.py egg_info
    running egg_info
    creating pip-egg-info/myprotos.egg-info
    writing pip-egg-info/myprotos.egg-info/PKG-INFO
    writing top-level names to pip-egg-info/myprotos.egg-info/top_level.txt
    writing dependency_links to pip-egg-info/myprotos.egg-info/dependency_links.txt
    writing manifest file 'pip-egg-info/myprotos.egg-info/SOURCES.txt'
    reading manifest file 'pip-egg-info/myprotos.egg-info/SOURCES.txt'
    writing manifest file 'pip-egg-info/myprotos.egg-info/SOURCES.txt'
  Source in /private/var/folders/3t/4qwkfyr903d0b7db7by2kj6r0000gn/T/pip-cFzP3I-build has version 0.0.1, which satisfies requirement myprotos==0.0.1 from git+https://myvcs.com/myprotos
Installing collected packages: myprotos
  Running setup.py install for myprotos: started
    Running command /usr/local/opt/python/bin/python2.7 -u -c "import setuptools, tokenize;__file__='/private/var/folders/3t/4qwkfyr903d0b7db7by2kj6r0000gn/T/pip-cFzP3I-build/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /var/folders/3t/4qwkfyr903d0b7db7by2kj6r0000gn/T/pip-M03grb-record/install-record.txt --single-version-externally-managed --compile
    running install
    Grabbing github.com/google/protobuf...
    Building Python protos...
    running build
    running install_egg_info
    running egg_info
    creating myprotos.egg-info
    writing myprotos.egg-info/PKG-INFO
    writing top-level names to myprotos.egg-info/top_level.txt
    writing dependency_links to myprotos.egg-info/dependency_links.txt
    writing manifest file 'myprotos.egg-info/SOURCES.txt'
    reading manifest file 'myprotos.egg-info/SOURCES.txt'
    writing manifest file 'myprotos.egg-info/SOURCES.txt'
    Copying myprotos.egg-info to /usr/local/lib/python2.7/site-packages/myprotos-0.0.1-py2.7.egg-info
    running install_scripts
    writing list of installed files to '/var/folders/3t/4qwkfyr903d0b7db7by2kj6r0000gn/T/pip-M03grb-record/install-record.txt'
    Running setup.py install for myprotos: finished with status 'done'
  Removing source in /private/var/folders/3t/4qwkfyr903d0b7db7by2kj6r0000gn/T/pip-cFzP3I-build
Successfully installed myprotos-0.0.1
Cleaning up...

So that all seems to install successfully. Even running pip list outputs:

$ pip list
.
.
.
myprotos (0.0.1)
.
.
.

However it throws an ImportError if I try to import the package.

$ python
Python 2.7.13 (default, Jul 18 2017, 09:17:00)
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import myprotos
Traceback (most recent call last):

  File "<stdin>", line 1, in <module>
ImportError: No module named myprotos

What could be going on here? Is it likely by build script fails on installation or is my package definition wrong or what could it be?

like image 860
Josh Avatar asked Jul 26 '17 14:07

Josh


1 Answers

The name of the egg is not necessarily the same as the name of the module or package it provides. In fact, it's quite common that these names are different. One egg can contain multiple packages, so it's not possible in general to use the same name. Moreover, an egg name can contain dashes and other characters that are not allowed in a Python module name.

The myprotos.egg-info directory in your Python site-packages directory should contain a file called top_level.txt that lists all top-level modules and packages the egg exports.

like image 133
Sven Marnach Avatar answered Oct 03 '22 19:10

Sven Marnach