Search code examples
pythonpackagingsetuptoolsdistutilspypi

Python package seems to ignore my requirements


I created my first package. When I try to install it with pip in a newly created virtualenv I get an error indicating that libs cannot be imported, yet they are added to the install_requires field in setup.py. If I do it outside a vierualenv, all is ok. My setup.py is here: https://github.com/tdi/pyPEPA/blob/dev/setup.py

To reproduce the error:

mkvirtualenv something -p /usr/bin/python3
workon something
pip install pypepa

.

Downloading/unpacking pypepa
 Running setup.py egg_info for package pypepa
 Traceback (most recent call last):
  File "<string>", line 16, in <module>
  File "/home/tdi/.virtualenvs/koza/build/pypepa/setup.py", line 3, in <module>
    import pypepa
  File "./pypepa/__init__.py", line 6, in <module>
    from pypepa.pepa_model import PEPAModel
  File "./pypepa/pepa_model.py", line 6, in <module>
    from pypepa.parsing.parser import PEPAParser
  File "./pypepa/parsing/parser.py", line 5, in <module>
    from pyparsing import Word, Literal, alphas, alphanums, nums, Combine, Optional, ZeroOrMore, Forward, restOfLine
ImportError: No module named 'pyparsing'
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 16, in <module>
 File "/home/tdi/.virtualenvs/koza/build/pypepa/setup.py", line 3, in <module>
import pypepa
File "./pypepa/__init__.py", line 6, in <module>
from pypepa.pepa_model import PEPAModel
 File "./pypepa/pepa_model.py", line 6, in <module>
from pypepa.parsing.parser import PEPAParser
 File "./pypepa/parsing/parser.py", line 5, in <module>
  from pyparsing import Word, Literal, alphas, alphanums, nums, Combine, Optional, ZeroOrMore, Forward, restOfLine
 ImportError: No module named 'pyparsing'
 ----------------------------------------
 Command python setup.py egg_info failed with error code 1 in      /home/tdi/.virtualenvs/koza/build/pypepa
 Storing complete log in /home/tdi/.pip/pip.log

Solution

  • Your setup script imports pypepa which imports pypepa.pepa_model which imports pyparsing, but pyparsing is not installed yet (we haven’t even finished running the setup script to know what the dependencies are). The solution is to repeat the version number in pypepa and setup.py (so you can remove the import), or not import PEPAModel in __init__.py.