1

I am currently writing a module and I want to use mypyc for it. I was following the documentation for using it inside setup.py but I am getting a ModuleNotFoundError everytime I try to import it there and run pip install ..
When running python setup.py install everything works without issue.
The error shows up when I try to import other modules too. They are all installed of course.
I have no idea what the problem could be.

This is my setup.py file:

from mypyc.build import mypycify
from setuptools import find_packages, setup

setup(
    name="my_lib_name",
    author="my_name",
    url="my_url",
    license="MIT",
    description="Some description",
    packages=find_packages(),
    version="0.0.1",
    install_requires=["levenshtein", "unidecode", "mypy"],
    ext_modules=mypycify(["mylib/"]),  # type: ignore
    python_requires=">=3.9",
    setup_requires=["pytest-runner"],
    tests_require=["pytest"],
    test_suite="tests",
)

And the error I am getting when running pip install .:

    File "setup.py", line 1, in <module>
      from mypyc.build import mypycify
  ModuleNotFoundError: No module named 'mypyc'
  ----------------------------------------
ERROR: Command errored out with exit status 1: 'c:\users\my_path\venv\scripts\python.exe' 'c:\users\my_path\venv\lib\site-packages\pip\_vendor\pep517\_in_process.py' get_requires_for_build_wheel 'C:\Users\my_name\AppData\Local\Temp\tmpa7qmg4q1' Check the logs for full command output.

Again, when running python setup.py install I dont get any error.
And of course, when I remove the mypyc import everything also works as intended.
Not sure what I am doing wrong here, hope someone can help me out.

For completion, I am using Python Version 3.9.2 and pip Version 20.2.3, but this error is also there when using the latest pip Version 22.0.4.

moinierer3000
  • 1,927
  • 2
  • 9
  • 24

1 Answers1

1

After a lot of trial and error, I have found the culprit. I had a pyproject.toml file in my project which seemed to cause the issue for whatever reason?? I am not sure why, it interferes with it for some reason.

This was the content of that pyproject.toml file:

[tool.black]
line_length=88

[tool.isort]
profile="black"

I added these lines on the top:

[build-system]
requires = ["setuptools", "setuptools-scm", "mypy"]
build-backend = "setuptools.build_meta"

"mypy" being the package that I want to import in the setup.py file.

Deleting the file completely works, too.

I hope this will help someone, maybe.

moinierer3000
  • 1,927
  • 2
  • 9
  • 24
  • 2
    I'll note that this is because pip builds packages in an isolated environment by default. Without the build system requirements specified, pip will fallback to only installing `setuptools` and `wheel` in the build environment. So once pip invokes setup.py it crashes as mypyc (provided by mypy) isn't available. Removing the pyproject.toml file does work, but that's because you're forcing pip to use the legacy build process for setuptools which doesn't involve an isolated build environment. – ichard26 May 14 '22 at 23:58
  • @ichard26 Thanks for explaining the cause of it! It was a pretty frustrating problem as I could not find anything on google relating to it, but this does make sense. – moinierer3000 May 15 '22 at 13:47