Error when importing setuptools in code
hariom-qure opened this issue · 1 comments
Our project uses Cythonize
and setuptools
in a dependency. The output generated by pyoxidizer fails when it encounters the import in code.
- Project is django based.
Django==3.2.5
pyoxidizer==0.24.0
OS details
Distributor ID: Ubuntu
Description: Ubuntu 20.04.4 LTS
Release: 20.04
Codename: focal
Linux: 5.4.0-109-generic
Error trace
Traceback (most recent call last):
File "runpy", line 197, in _run_module_as_main
File "runpy", line 87, in _run_code
File "/home/users/hariom.narang/qureapp/build/x86_64-unknown-linux-gnu/debug/install/lib/qureapp/__main__.py", line 35, in <module>
main()
File "/home/users/hariom.narang/qureapp/build/x86_64-unknown-linux-gnu/debug/install/lib/qureapp/__main__.py", line 31, in main
execute_from_command_line(args)
File "/home/users/hariom.narang/qureapp/build/x86_64-unknown-linux-gnu/debug/install/lib/django/core/management/__init__.py", line 419, in execute_from_command_line
utility.execute()
File "/home/users/hariom.narang/qureapp/build/x86_64-unknown-linux-gnu/debug/install/lib/django/core/management/__init__.py", line 395, in execute
django.setup()
File "/home/users/hariom.narang/qureapp/build/x86_64-unknown-linux-gnu/debug/install/lib/django/__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "/home/users/hariom.narang/qureapp/build/x86_64-unknown-linux-gnu/debug/install/lib/django/apps/registry.py", line 114, in populate
app_config.import_models()
File "/home/users/hariom.narang/qureapp/build/x86_64-unknown-linux-gnu/debug/install/lib/django/apps/config.py", line 301, in import_models
self.models_module = import_module(models_module_name)
File "importlib", line 127, in import_module
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 850, in exec_module
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "/home/users/hariom.narang/qureapp/build/x86_64-unknown-linux-gnu/debug/install/lib/qureapp/model_manager/models/__init__.py", line 1, in <module>
from .sourcerunconfig import SourceRunConfig
File "/home/users/hariom.narang/qureapp/build/x86_64-unknown-linux-gnu/debug/install/lib/qureapp/model_manager/models/sourcerunconfig.py", line 8, in <module>
from model_manager.qct_tasks.utils.qct_service import default_qct_source_config
File "/home/users/hariom.narang/qureapp/build/x86_64-unknown-linux-gnu/debug/install/lib/qureapp/model_manager/qct_tasks/utils/__init__.py", line 1, in <module>
from .qct_service import get_sorted_dicoms_fpaths, get_qct_series_classifier
File "/home/users/hariom.narang/qureapp/build/x86_64-unknown-linux-gnu/debug/install/lib/qureapp/model_manager/qct_tasks/utils/qct_service.py", line 8, in <module>
from qct_prod import classify_dicom_series
File "/home/users/hariom.narang/qureapp/build/x86_64-unknown-linux-gnu/debug/install/lib/qct_prod/__init__.py", line 4, in <module>
from .prediction_controller import QCTPredictionController
File "/home/users/hariom.narang/qureapp/build/x86_64-unknown-linux-gnu/debug/install/lib/qct_prod/prediction_controller.py", line 10, in <module>
from segment_lung.lobe_apis import LobeSegmentation
File "/home/users/hariom.narang/qureapp/build/x86_64-unknown-linux-gnu/debug/install/lib/segment_lung/lobe_apis.py", line 16, in <module>
from .baseapi import SegmentationModelBase
File "/home/users/hariom.narang/qureapp/build/x86_64-unknown-linux-gnu/debug/install/lib/segment_lung/baseapi.py", line 15, in <module>
from segment_lung.security import torch_load_enc
File "/home/users/hariom.narang/qureapp/build/x86_64-unknown-linux-gnu/debug/install/lib/segment_lung/security.py", line 7, in <module>
from qure_adhoc.enc.qryptography import Crypter
File "src/qure_adhoc/__init__.py", line 1, in init qure_adhoc.__init__
File "src/qure_adhoc/cyth/__init__.py", line 1, in init qure_adhoc.cyth.__init__
File "src/qure_adhoc/cyth/utils.py", line 8, in init qure_adhoc.cyth.utils
File "src/qure_adhoc/cyth/qythonize.py", line 4, in init qure_adhoc.cyth.qythonize
File "/tmp/pip-target-scl0epn3/lib/python/setuptools/__init__.py", line 8, in <module>
File "/tmp/pip-target-scl0epn3/lib/python/_distutils_hack/override.py", line 1, in <module>
File "/tmp/pip-target-scl0epn3/lib/python/_distutils_hack/__init__.py", line 77, in do_override
File "/tmp/pip-target-scl0epn3/lib/python/_distutils_hack/__init__.py", line 64, in ensure_local_distutils
AssertionError: /home/users/hariom.narang/qureapp/build/x86_64-unknown-linux-gnu/debug/install/lib/distutils/core.py
Later versions of Setuptools introduced a _distutils_hack
that works to ensure that distutils
is imported not from stdlib but from setuptools._distutils
. It achieves this end by installing a MetaFinder that imports setuptools._distutils
when distutils
is requested. The fact that the assertion is triggering suggests that the MetaFinder isn't having any effect (perhaps because a Pyoxidizer meta finder is taking precedence).
I'd suggest setting a breakpoint at line 60 (inside the shim) and evaluate the environment to determine why import distutils
isn't resolving from setuptools._distutils
.
In the meantime, you may be able to work around the issue by setting SETUPTOOLS_USE_DISTUTILS=stdlib
.