Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

install PyMeshLab on M1-chip #167

Closed
MarsVegetables opened this issue Dec 16, 2021 · 32 comments
Closed

install PyMeshLab on M1-chip #167

MarsVegetables opened this issue Dec 16, 2021 · 32 comments
Labels
enhancement New feature or request

Comments

@MarsVegetables
Copy link

Hi,
Currently, this useful lib could not be installed via pip on my M1-chip Mac.
Do you have any plan for providing the installation option?
Thank you.

@alemuntoni
Copy link
Member

Hi,
sorry for the late reply. At the moment we don't have the possibility to test anything on M1, I even don't know if pymeshlab builds on that architecture. Sorry about that. Also releasing it with our build-and-release pipeline on github actions would be not easy (they provide only x86-64 architecture on mac), but I guess that it could be done using cross compilation..
If anyone that has an M1 mac wants to provide any help on this (at least to make pymeshlab build on M1 and make a test wheel), it would be really appreciated.

@alemuntoni alemuntoni added the enhancement New feature or request label Jan 11, 2022
@StWiemann
Copy link

StWiemann commented Jan 31, 2022

I do have an MBP 2021 with an M1 Processor and I am interested in installing this on a Mac. If I can help you with that, please let me know. But I have to admit that I am pretty clueless when it comes to the whole Wheel-Stuff. You might have to give me precise instructions on how to be helpful :)

@alemuntoni
Copy link
Member

Right now, we cannot automate the build of m1 (see cnr-isti-vclab/meshlab#1172 and actions/runner-images#2187).
Also having a M1 machine and build manually the package would led on generating a wheel for a specific python version (as you can see in the release page, we release a version of pymeshlab for each python version and for each architecture).
If you want to try building pymeshlab, here there are the instructions to build pymeshlab.
You can also try to build it using the scripts: after having cloned the repo and installed python and qt, it should be as easy as calling:

sh scripts/macOS/1_build.sh

Also knowing if right now it builds easily would help for a future release!

@StWiemann
Copy link

After sorting out some path-stuff with Qt5 it built just fine with and without the 1_build.sh script. 👍

@alemuntoni
Copy link
Member

Great @StWiemann, thanks!
So, I just fixed a small bug with the last commit.
Could you please pull, rebuild and then go into the distrib folder inside the build directory and try pymeshlab?
Just opening a terminal from the distrib directory and run

python3
import pymeshlab

@StWiemann
Copy link

@alemuntoni Sorry that it took me so long. I encountered an error I tried sorting out beforehand and it turned out that I didn't clone the whole repository correctly. That took some time to figure out. But after that everything worked fine and I was able to import pymeshlab. :)

@alemuntoni
Copy link
Member

@StWiemann that's great! Then we just need to wait until github actions makes available M1 virtual machines..
Just to be sure that everything works as expected, could you please run the tests from the distrib directory?

pytest --pyargs pymeshlab

You'll need to run pip install pytest if you don't have the pytest package installed.

@StWiemann
Copy link

StWiemann commented Feb 11, 2022

Tried it with a conda and a pyenv virtual env of python 3.9 just to make sure that it isn't conda-related:

When I do python -m pytest --pyargs pymeshlab (something I found on the Internet as suggested fix) I get:

============================= test session starts ==============================
platform darwin -- Python 3.9.9, pytest-7.0.1, pluggy-1.0.0
rootdir: /Users/stephan/git/test-pymesh/PyMeshLab
collected 9 items                                                              

pymeshlab/dummybin.app/Contents/tests/test_ambient_occlusion.py F        [ 11%]
pymeshlab/dummybin.app/Contents/tests/test_delete_small_components.py F  [ 22%]
pymeshlab/dummybin.app/Contents/tests/test_hausdorff.py F                [ 33%]
pymeshlab/dummybin.app/Contents/tests/test_laplacian_smoothing.py F      [ 44%]
pymeshlab/dummybin.app/Contents/tests/test_merge_meshes.py F             [ 55%]
pymeshlab/dummybin.app/Contents/tests/test_mesh_booleans.py F            [ 66%]
pymeshlab/dummybin.app/Contents/tests/test_number_plugins.py F           [ 77%]
pymeshlab/dummybin.app/Contents/tests/test_select_faces_with_edge_longer_than.py F [ 88%]
                                                                         [ 88%]
pymeshlab/dummybin.app/Contents/tests/test_texture_map_defragmentation.py F [100%]

=================================== FAILURES ===================================
____________________________ test_ambient_occlusion ____________________________

    @pytest.mark.glcontext
    def test_ambient_occlusion():
        print('\n')
        base_path = samples_common.samples_absolute_path()
        output_path = samples_common.test_output_path()
>       ms = ml.MeshSet()
E       AttributeError: module 'pymeshlab' has no attribute 'MeshSet'

pymeshlab/dummybin.app/Contents/tests/test_ambient_occlusion.py:13: AttributeError
----------------------------- Captured stdout call -----------------------------


_________________________ test_delete_small_components _________________________

    def test_delete_small_components():
        print('\n')
        base_path = samples_common.samples_absolute_path()
        output_path = samples_common.test_output_path()
>       ms = ml.MeshSet()
E       AttributeError: module 'pymeshlab' has no attribute 'MeshSet'

pymeshlab/dummybin.app/Contents/tests/test_delete_small_components.py:9: AttributeError
----------------------------- Captured stdout call -----------------------------


________________________________ test_hausdorff ________________________________

    def test_hausdorff():
        print('\n')
        base_path = samples_common.samples_absolute_path()
>       ms = ml.MeshSet()
E       AttributeError: module 'pymeshlab' has no attribute 'MeshSet'

pymeshlab/dummybin.app/Contents/tests/test_hausdorff.py:8: AttributeError
----------------------------- Captured stdout call -----------------------------


___________________________ test_laplacian_smoothing ___________________________

    def test_laplacian_smoothing():
        print('\n')
        output_path = samples_common.test_output_path()
>       ms = ml.MeshSet()
E       AttributeError: module 'pymeshlab' has no attribute 'MeshSet'

pymeshlab/dummybin.app/Contents/tests/test_laplacian_smoothing.py:8: AttributeError
----------------------------- Captured stdout call -----------------------------


______________________________ test_merge_meshes _______________________________

    def test_merge_meshes():
        print('\n')
        base_path = samples_common.samples_absolute_path()
        output_path = samples_common.test_output_path()
>       ms = ml.MeshSet()
E       AttributeError: module 'pymeshlab' has no attribute 'MeshSet'

pymeshlab/dummybin.app/Contents/tests/test_merge_meshes.py:9: AttributeError
----------------------------- Captured stdout call -----------------------------


______________________________ test_mesh_booleans ______________________________

    def test_mesh_booleans():
        print('\n')
        base_path = samples_common.samples_absolute_path()
        output_path = samples_common.test_output_path()
>       ms = ml.MeshSet()
E       AttributeError: module 'pymeshlab' has no attribute 'MeshSet'

pymeshlab/dummybin.app/Contents/tests/test_mesh_booleans.py:9: AttributeError
----------------------------- Captured stdout call -----------------------------


_____________________________ test_number_plugins ______________________________

    def test_number_plugins():
        print('\n')
>       n_plugins = ml.number_plugins()
E       AttributeError: module 'pymeshlab' has no attribute 'number_plugins'

pymeshlab/dummybin.app/Contents/tests/test_number_plugins.py:6: AttributeError
----------------------------- Captured stdout call -----------------------------


___________________ test_select_faces_with_edge_longer_than ____________________

    def test_select_faces_with_edge_longer_than():
        print('\n')
        base_path = samples_common.samples_absolute_path()
>       ms = ml.MeshSet()
E       AttributeError: module 'pymeshlab' has no attribute 'MeshSet'

pymeshlab/dummybin.app/Contents/tests/test_select_faces_with_edge_longer_than.py:8: AttributeError
----------------------------- Captured stdout call -----------------------------


_______________________ test_texture_map_defragmentation _______________________

    @pytest.mark.glcontext
    def test_texture_map_defragmentation():
        print('\n')
        base_path = samples_common.samples_absolute_path()
        output_path = samples_common.test_output_path()
>       ms = ml.MeshSet()
E       AttributeError: module 'pymeshlab' has no attribute 'MeshSet'

pymeshlab/dummybin.app/Contents/tests/test_texture_map_defragmentation.py:13: AttributeError
----------------------------- Captured stdout call -----------------------------


=============================== warnings summary ===============================
pymeshlab/dummybin.app/Contents/tests/test_ambient_occlusion.py:8
  /Users/stephan/git/test-pymesh/PyMeshLab/src/build/distrib/pymeshlab/dummybin.app/Contents/tests/test_ambient_occlusion.py:8: PytestUnknownMarkWarning: Unknown pytest.mark.glcontext - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.glcontext

pymeshlab/dummybin.app/Contents/tests/test_texture_map_defragmentation.py:8
  /Users/stephan/git/test-pymesh/PyMeshLab/src/build/distrib/pymeshlab/dummybin.app/Contents/tests/test_texture_map_defragmentation.py:8: PytestUnknownMarkWarning: Unknown pytest.mark.glcontext - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.glcontext

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED pymeshlab/dummybin.app/Contents/tests/test_ambient_occlusion.py::test_ambient_occlusion
FAILED pymeshlab/dummybin.app/Contents/tests/test_delete_small_components.py::test_delete_small_components
FAILED pymeshlab/dummybin.app/Contents/tests/test_hausdorff.py::test_hausdorff
FAILED pymeshlab/dummybin.app/Contents/tests/test_laplacian_smoothing.py::test_laplacian_smoothing
FAILED pymeshlab/dummybin.app/Contents/tests/test_merge_meshes.py::test_merge_meshes
FAILED pymeshlab/dummybin.app/Contents/tests/test_mesh_booleans.py::test_mesh_booleans
FAILED pymeshlab/dummybin.app/Contents/tests/test_number_plugins.py::test_number_plugins
FAILED pymeshlab/dummybin.app/Contents/tests/test_select_faces_with_edge_longer_than.py::test_select_faces_with_edge_longer_than
FAILED pymeshlab/dummybin.app/Contents/tests/test_texture_map_defragmentation.py::test_texture_map_defragmentation
======================== 9 failed, 2 warnings in 0.04s =========================

When I try it with just pytest --pyargs pymeshlab I get:

============================= test session starts ==============================
platform darwin -- Python 3.9.9, pytest-7.0.1, pluggy-1.0.0
rootdir: /Users/stephan/git/test-pymesh/PyMeshLab
collected 0 items / 9 errors                                                   

==================================== ERRORS ====================================
_ ERROR collecting src/build/distrib/pymeshlab/dummybin.app/Contents/tests/test_ambient_occlusion.py _
ImportError while importing test module '/Users/stephan/git/test-pymesh/PyMeshLab/src/build/distrib/pymeshlab/dummybin.app/Contents/tests/test_ambient_occlusion.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/Users/stephan/.pyenv/versions/3.9.9/lib/python3.9/importlib/__init__.py:127: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
pymeshlab/dummybin.app/Contents/tests/test_ambient_occlusion.py:1: in <module>
    import pymeshlab as ml
E   ModuleNotFoundError: No module named 'pymeshlab'
_ ERROR collecting src/build/distrib/pymeshlab/dummybin.app/Contents/tests/test_delete_small_components.py _
ImportError while importing test module '/Users/stephan/git/test-pymesh/PyMeshLab/src/build/distrib/pymeshlab/dummybin.app/Contents/tests/test_delete_small_components.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/Users/stephan/.pyenv/versions/3.9.9/lib/python3.9/importlib/__init__.py:127: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
pymeshlab/dummybin.app/Contents/tests/test_delete_small_components.py:1: in <module>
    import pymeshlab as ml
E   ModuleNotFoundError: No module named 'pymeshlab'
_ ERROR collecting src/build/distrib/pymeshlab/dummybin.app/Contents/tests/test_hausdorff.py _
ImportError while importing test module '/Users/stephan/git/test-pymesh/PyMeshLab/src/build/distrib/pymeshlab/dummybin.app/Contents/tests/test_hausdorff.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/Users/stephan/.pyenv/versions/3.9.9/lib/python3.9/importlib/__init__.py:127: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
pymeshlab/dummybin.app/Contents/tests/test_hausdorff.py:1: in <module>
    import pymeshlab as ml
E   ModuleNotFoundError: No module named 'pymeshlab'
_ ERROR collecting src/build/distrib/pymeshlab/dummybin.app/Contents/tests/test_laplacian_smoothing.py _
ImportError while importing test module '/Users/stephan/git/test-pymesh/PyMeshLab/src/build/distrib/pymeshlab/dummybin.app/Contents/tests/test_laplacian_smoothing.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/Users/stephan/.pyenv/versions/3.9.9/lib/python3.9/importlib/__init__.py:127: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
pymeshlab/dummybin.app/Contents/tests/test_laplacian_smoothing.py:1: in <module>
    import pymeshlab as ml
E   ModuleNotFoundError: No module named 'pymeshlab'
_ ERROR collecting src/build/distrib/pymeshlab/dummybin.app/Contents/tests/test_merge_meshes.py _
ImportError while importing test module '/Users/stephan/git/test-pymesh/PyMeshLab/src/build/distrib/pymeshlab/dummybin.app/Contents/tests/test_merge_meshes.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/Users/stephan/.pyenv/versions/3.9.9/lib/python3.9/importlib/__init__.py:127: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
pymeshlab/dummybin.app/Contents/tests/test_merge_meshes.py:1: in <module>
    import pymeshlab as ml
E   ModuleNotFoundError: No module named 'pymeshlab'
_ ERROR collecting src/build/distrib/pymeshlab/dummybin.app/Contents/tests/test_mesh_booleans.py _
ImportError while importing test module '/Users/stephan/git/test-pymesh/PyMeshLab/src/build/distrib/pymeshlab/dummybin.app/Contents/tests/test_mesh_booleans.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/Users/stephan/.pyenv/versions/3.9.9/lib/python3.9/importlib/__init__.py:127: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
pymeshlab/dummybin.app/Contents/tests/test_mesh_booleans.py:1: in <module>
    import pymeshlab as ml
E   ModuleNotFoundError: No module named 'pymeshlab'
_ ERROR collecting src/build/distrib/pymeshlab/dummybin.app/Contents/tests/test_number_plugins.py _
ImportError while importing test module '/Users/stephan/git/test-pymesh/PyMeshLab/src/build/distrib/pymeshlab/dummybin.app/Contents/tests/test_number_plugins.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/Users/stephan/.pyenv/versions/3.9.9/lib/python3.9/importlib/__init__.py:127: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
pymeshlab/dummybin.app/Contents/tests/test_number_plugins.py:1: in <module>
    import pymeshlab as ml
E   ModuleNotFoundError: No module named 'pymeshlab'
_ ERROR collecting src/build/distrib/pymeshlab/dummybin.app/Contents/tests/test_select_faces_with_edge_longer_than.py _
ImportError while importing test module '/Users/stephan/git/test-pymesh/PyMeshLab/src/build/distrib/pymeshlab/dummybin.app/Contents/tests/test_select_faces_with_edge_longer_than.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/Users/stephan/.pyenv/versions/3.9.9/lib/python3.9/importlib/__init__.py:127: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
pymeshlab/dummybin.app/Contents/tests/test_select_faces_with_edge_longer_than.py:1: in <module>
    import pymeshlab as ml
E   ModuleNotFoundError: No module named 'pymeshlab'
_ ERROR collecting src/build/distrib/pymeshlab/dummybin.app/Contents/tests/test_texture_map_defragmentation.py _
ImportError while importing test module '/Users/stephan/git/test-pymesh/PyMeshLab/src/build/distrib/pymeshlab/dummybin.app/Contents/tests/test_texture_map_defragmentation.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/Users/stephan/.pyenv/versions/3.9.9/lib/python3.9/importlib/__init__.py:127: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
pymeshlab/dummybin.app/Contents/tests/test_texture_map_defragmentation.py:1: in <module>
    import pymeshlab as ml
E   ModuleNotFoundError: No module named 'pymeshlab'
=========================== short test summary info ============================
ERROR pymeshlab/dummybin.app/Contents/tests/test_ambient_occlusion.py
ERROR pymeshlab/dummybin.app/Contents/tests/test_delete_small_components.py
ERROR pymeshlab/dummybin.app/Contents/tests/test_hausdorff.py
ERROR pymeshlab/dummybin.app/Contents/tests/test_laplacian_smoothing.py
ERROR pymeshlab/dummybin.app/Contents/tests/test_merge_meshes.py
ERROR pymeshlab/dummybin.app/Contents/tests/test_mesh_booleans.py
ERROR pymeshlab/dummybin.app/Contents/tests/test_number_plugins.py
ERROR pymeshlab/dummybin.app/Contents/tests/test_select_faces_with_edge_longer_than.py
ERROR pymeshlab/dummybin.app/Contents/tests/test_texture_map_defragmentation.py
!!!!!!!!!!!!!!!!!!! Interrupted: 9 errors during collection !!!!!!!!!!!!!!!!!!!!
============================== 9 errors in 0.06s =============================

Not sure why it can't find pymeshlab.

@David-Baddeley
Copy link

Ran into a very odd issue building from source on an M1 (latest master). Have a work-around but thought I'd share it in case it effects others.

  • build is OK, but import pymeshlab causes a hard crash, due to code signing issues.
Crash report
-------------------------------------
Translated Report (Full Report Below)
-------------------------------------

Process: python3.8 [1816]
Path: /Users/USER/*/python3.8
Identifier: python3.8
Version: ???
Code Type: ARM-64 (Native)
Parent Process: zsh [567]
Responsible: Terminal [501]
User ID: 501

Date/Time: 2022-03-15 14:29:52.0911 +1300
OS Version: macOS 12.1 (21C52)
Report Version: 12
Anonymous UUID: 2BE0EFF7-5876-DDD6-578B-D17A0D293236

Time Awake Since Boot: 620 seconds

System Integrity Protection: enabled

Crashed Thread: 0 Dispatch queue: com.apple.main-thread

Exception Type: EXC_BAD_ACCESS (SIGKILL (Code Signature Invalid))
Exception Codes: UNKNOWN_0x32 at 0x0000000105b80000
Exception Codes: 0x0000000000000032, 0x0000000105b80000
Exception Note: EXC_CORPSE_NOTIFY

Termination Reason: Namespace CODESIGNING, Code 2

VM Region Info: 0x105b80000 is in 0x105b80000-0x105ba8000; bytes after start: 0 bytes before end: 163839
REGION TYPE START - END [ VSIZE] PRT/MAX SHRMOD REGION DETAIL
mapped file 105b70000-105b80000 [ 64K] r--/rwx SM=COW ...t_id=2f5636f5
---> mapped file 105b80000-105ba8000 [ 160K] r-x/rwx SM=COW ...t_id=2f5648f5
VM_ALLOCATE (reserved) 105ba8000-105bd0000 [ 160K] rw-/rwx SM=NUL ...(unallocated)

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 dyld 0x1035a7d88 dyld3::MachOFile::isMachO(Diagnostics&, unsigned long long) const + 20
1 dyld 0x103589174 dyld4::Loader::mapSegments(Diagnostics&, dyld4::RuntimeState&, char const*, unsigned long long, dyld4::Loader::CodeSignatureInFile const&, bool, dyld3::Arraydyld4::Loader::Region const&, bool, bool, dyld4::Loader::FileValidationInfo const&) + 1092
2 dyld 0x103589174 dyld4::Loader::mapSegments(Diagnostics&, dyld4::RuntimeState&, char const*, unsigned long long, dyld4::Loader::CodeSignatureInFile const&, bool, dyld3::Arraydyld4::Loader::Region const&, bool, bool, dyld4::Loader::FileValidationInfo const&) + 1092
3 dyld 0x10358e990 invocation function for block in dyld4::JustInTimeLoader::makeJustInTimeLoaderDisk(Diagnostics&, dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&, bool, unsigned int) + 68
4 dyld 0x10358e324 dyld4::JustInTimeLoader::withRegions(dyld3::MachOAnalyzer const*, void (dyld3::Arraydyld4::Loader::Region const&) block_pointer) + 292
5 dyld 0x10358e8e4 invocation function for block in dyld4::JustInTimeLoader::makeJustInTimeLoaderDisk(Diagnostics&, dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&, bool, unsigned int) + 492
6 dyld 0x103593b44 dyld4::SyscallDelegate::withReadOnlyMappedFile(Diagnostics&, char const*, bool, void (void const*, unsigned long, bool, dyld4::FileID const&, char const*) block_pointer) const + 128
7 dyld 0x10358e6c4 dyld4::JustInTimeLoader::makeJustInTimeLoaderDisk(Diagnostics&, dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&, bool, unsigned int) + 204
8 dyld 0x103588580 invocation function for block in dyld4::Loader::getLoader(Diagnostics&, dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&) + 1412
9 dyld 0x103587810 dyld4::Loader::forEachResolvedAtPathVar(dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&, dyld4::ProcessConfig::PathOverrides::Type, bool&, void (char const*, dyld4::ProcessConfig::PathOverrides::Type, bool&) block_pointer) + 172
10 dyld 0x1035876d8 invocation function for block in dyld4::Loader::forEachPath(Diagnostics&, dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&, void (char const*, dyld4::ProcessConfig::PathOverrides::Type, bool&) block_pointer) + 116
11 dyld 0x10357de90 dyld4::ProcessConfig::PathOverrides::forEachPathVariant(char const*, dyld3::Platform, bool, bool&, void (char const*, dyld4::ProcessConfig::PathOverrides::Type, bool&) block_pointer) const + 672
12 dyld 0x10358764c dyld4::Loader::forEachPath(Diagnostics&, dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&, void (char const*, dyld4::ProcessConfig::PathOverrides::Type, bool&) block_pointer) + 172
13 dyld 0x103587df8 dyld4::Loader::getLoader(Diagnostics&, dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&) + 840
14 dyld 0x10358c968 invocation function for block in dyld4::JustInTimeLoader::loadDependents(Diagnostics&, dyld4::RuntimeState&, dyld4::Loader::LoadOptions const&) + 380
15 dyld 0x1035a8ffc invocation function for block in dyld3::MachOFile::forEachDependentDylib(void (char const*, bool, bool, bool, unsigned int, unsigned int, bool&) block_pointer) const + 148
16 dyld 0x103575f98 dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void (load_command const*, bool&) block_pointer) const + 168
17 dyld 0x1035a8e3c dyld3::MachOFile::forEachDependentDylib(void (char const*, bool, bool, bool, unsigned int, unsigned int, bool&) block_pointer) const + 172
18 dyld 0x10358c6d0 dyld4::JustInTimeLoader::loadDependents(Diagnostics&, dyld4::RuntimeState&, dyld4::Loader::LoadOptions const&) + 164
19 dyld 0x103599ad4 invocation function for block in dyld4::APIs::dlopen_from(char const*, int, void*) + 472
20 dyld 0x10357ea24 dyld4::RuntimeState::withLoadersWriteLock(void () block_pointer) + 100
21 dyld 0x103599704 dyld4::APIs::dlopen_from(char const*, int, void*) + 464
22 python3.8 0x102f593d8 _PyImport_FindSharedFuncptr + 380
23 python3.8 0x102f19abc _PyImport_LoadDynamicModuleWithSpec + 1304
24 python3.8 0x102f1885c _imp_create_dynamic + 456
25 python3.8 0x102e23970 cfunction_vectorcall_FASTCALL + 284
26 python3.8 0x102dd14c0 PyVectorcall_Call + 120
27 python3.8 0x102ee3318 _PyEval_EvalFrameDefault + 30588
28 python3.8 0x102edb584 _PyEval_EvalCodeWithName + 3340
29 python3.8 0x102dd1f10 _PyFunction_Vectorcall + 236
30 python3.8 0x102ee6348 call_function + 528
31 python3.8 0x102ee2ebc _PyEval_EvalFrameDefault + 29472
32 python3.8 0x102dd1d90 function_code_fastcall + 128
33 python3.8 0x102ee6348 call_function + 528
34 python3.8 0x102ee2ea0 _PyEval_EvalFrameDefault + 29444
35 python3.8 0x102dd1d90 function_code_fastcall + 128
36 python3.8 0x102ee6348 call_function + 528
37 python3.8 0x102ee2f34 _PyEval_EvalFrameDefault + 29592
38 python3.8 0x102dd1d90 function_code_fastcall + 128
39 python3.8 0x102ee6348 call_function + 528
40 python3.8 0x102ee2f34 _PyEval_EvalFrameDefault + 29592
41 python3.8 0x102dd1d90 function_code_fastcall + 128
42 python3.8 0x102ee6348 call_function + 528
43 python3.8 0x102ee2f34 _PyEval_EvalFrameDefault + 29592
44 python3.8 0x102dd1d90 function_code_fastcall + 128
45 python3.8 0x102dd3b34 object_vacall + 444
46 python3.8 0x102dd3cc4 _PyObject_CallMethodIdObjArgs + 116
47 python3.8 0x102f136f4 PyImport_ImportModuleLevelObject + 1792
48 python3.8 0x102ee1130 _PyEval_EvalFrameDefault + 21908
49 python3.8 0x102edb584 _PyEval_EvalCodeWithName + 3340
50 python3.8 0x102ed6650 builtin_exec + 1096
51 python3.8 0x102e23970 cfunction_vectorcall_FASTCALL + 284
52 python3.8 0x102dd14c0 PyVectorcall_Call + 120
53 python3.8 0x102ee3318 _PyEval_EvalFrameDefault + 30588
54 python3.8 0x102edb584 _PyEval_EvalCodeWithName + 3340
55 python3.8 0x102dd1f10 _PyFunction_Vectorcall + 236
56 python3.8 0x102ee6348 call_function + 528
57 python3.8 0x102ee2ebc _PyEval_EvalFrameDefault + 29472
58 python3.8 0x102dd1d90 function_code_fastcall + 128
59 python3.8 0x102ee6348 call_function + 528
60 python3.8 0x102ee2ea0 _PyEval_EvalFrameDefault + 29444
61 python3.8 0x102dd1d90 function_code_fastcall + 128
62 python3.8 0x102ee6348 call_function + 528
63 python3.8 0x102ee2f34 _PyEval_EvalFrameDefault + 29592
64 python3.8 0x102dd1d90 function_code_fastcall + 128
65 python3.8 0x102ee6348 call_function + 528
66 python3.8 0x102ee2f34 _PyEval_EvalFrameDefault + 29592
67 python3.8 0x102dd1d90 function_code_fastcall + 128
68 python3.8 0x102dd3b34 object_vacall + 444
69 python3.8 0x102dd3cc4 _PyObject_CallMethodIdObjArgs + 116
70 python3.8 0x102f136f4 PyImport_ImportModuleLevelObject + 1792
71 python3.8 0x102ee1130 _PyEval_EvalFrameDefault + 21908
72 python3.8 0x102edb584 _PyEval_EvalCodeWithName + 3340
73 python3.8 0x102ed6650 builtin_exec + 1096
74 python3.8 0x102e23970 cfunction_vectorcall_FASTCALL + 284
75 python3.8 0x102ee6348 call_function + 528
76 python3.8 0x102ee2f34 _PyEval_EvalFrameDefault + 29592
77 python3.8 0x102de8d3c gen_send_ex + 324
78 python3.8 0x102ede90c _PyEval_EvalFrameDefault + 11632
79 python3.8 0x102de8d3c gen_send_ex + 324
80 python3.8 0x102ede90c _PyEval_EvalFrameDefault + 11632
81 python3.8 0x102de8d3c gen_send_ex + 324
82 python3.8 0x102ddfa4c method_vectorcall_O + 448
83 python3.8 0x102ee6348 call_function + 528
84 python3.8 0x102ee2ea0 _PyEval_EvalFrameDefault + 29444
85 python3.8 0x102dd1d90 function_code_fastcall + 128
86 python3.8 0x102ee6348 call_function + 528
87 python3.8 0x102ee2f34 _PyEval_EvalFrameDefault + 29592
88 python3.8 0x102dd1d90 function_code_fastcall + 128
89 python3.8 0x102ee6348 call_function + 528
90 python3.8 0x102ee2ea0 _PyEval_EvalFrameDefault + 29444
91 python3.8 0x102edb584 _PyEval_EvalCodeWithName + 3340
92 python3.8 0x102dd1f10 _PyFunction_Vectorcall + 236
93 python3.8 0x102dd591c method_vectorcall + 156
94 python3.8 0x102ee6348 call_function + 528
95 python3.8 0x102ee2fac _PyEval_EvalFrameDefault + 29712
96 python3.8 0x102dd1d90 function_code_fastcall + 128
97 python3.8 0x102ee6348 call_function + 528
98 python3.8 0x102ee2ea0 _PyEval_EvalFrameDefault + 29444
99 python3.8 0x102dd1d90 function_code_fastcall + 128
100 python3.8 0x102ee6348 call_function + 528
101 python3.8 0x102ee2ea0 _PyEval_EvalFrameDefault + 29444
102 python3.8 0x102dd1d90 function_code_fastcall + 128
103 python3.8 0x102ee6348 call_function + 528
104 python3.8 0x102ee2ea0 _PyEval_EvalFrameDefault + 29444
105 python3.8 0x102edb584 _PyEval_EvalCodeWithName + 3340
106 python3.8 0x102dd1f10 _PyFunction_Vectorcall + 236
107 python3.8 0x102dd5a88 method_vectorcall + 520
108 python3.8 0x102dd14c0 PyVectorcall_Call + 120
109 python3.8 0x102ee314c _PyEval_EvalFrameDefault + 30128
110 python3.8 0x102edb584 _PyEval_EvalCodeWithName + 3340
111 python3.8 0x102dd1f10 _PyFunction_Vectorcall + 236
112 python3.8 0x102ee6348 call_function + 528
113 python3.8 0x102ee2f34 _PyEval_EvalFrameDefault + 29592
114 python3.8 0x102edb584 _PyEval_EvalCodeWithName + 3340
115 python3.8 0x102f34e3c PyRun_SimpleFileExFlags + 1052
116 python3.8 0x102f5ceb0 Py_RunMain + 2980
117 python3.8 0x102f5e0a8 pymain_main + 1244
118 python3.8 0x102da81e0 main + 56
119 dyld 0x1035790f4 start + 520

Thread 1:
0 libsystem_kernel.dylib 0x1b3b5d0c0 __psynch_cvwait + 8
1 libsystem_pthread.dylib 0x1b3b95808 _pthread_cond_wait + 1228
2 python3.8 0x102f49ae8 PyThread_acquire_lock_timed + 604
3 python3.8 0x102fb7d9c acquire_timed + 256
4 python3.8 0x102fb7fb0 lock_PyThread_acquire_lock + 72
5 python3.8 0x102ddf27c method_vectorcall_VARARGS_KEYWORDS + 568
6 python3.8 0x102ee6348 call_function + 528
7 python3.8 0x102ee2ea0 _PyEval_EvalFrameDefault + 29444
8 python3.8 0x102edb584 _PyEval_EvalCodeWithName + 3340
9 python3.8 0x102dd1f10 _PyFunction_Vectorcall + 236
10 python3.8 0x102ee6348 call_function + 528
11 python3.8 0x102ee2ea0 _PyEval_EvalFrameDefault + 29444
12 python3.8 0x102edb584 _PyEval_EvalCodeWithName + 3340
13 python3.8 0x102dd1f10 _PyFunction_Vectorcall + 236
14 python3.8 0x102ee6348 call_function + 528
15 python3.8 0x102ee2ea0 _PyEval_EvalFrameDefault + 29444
16 python3.8 0x102dd1d90 function_code_fastcall + 128
17 python3.8 0x102dd14c0 PyVectorcall_Call + 120
18 python3.8 0x102ee314c _PyEval_EvalFrameDefault + 30128
19 python3.8 0x102edb584 _PyEval_EvalCodeWithName + 3340
20 python3.8 0x102dd1f10 _PyFunction_Vectorcall + 236
21 python3.8 0x102dd14c0 PyVectorcall_Call + 120
22 python3.8 0x102ee314c _PyEval_EvalFrameDefault + 30128
23 python3.8 0x102edb584 _PyEval_EvalCodeWithName + 3340
24 python3.8 0x102dd1f10 _PyFunction_Vectorcall + 236
25 python3.8 0x102ee6348 call_function + 528
26 python3.8 0x102ee2ea0 _PyEval_EvalFrameDefault + 29444
27 python3.8 0x102dd1d90 function_code_fastcall + 128
28 python3.8 0x102ee6348 call_function + 528
29 python3.8 0x102ee2ea0 _PyEval_EvalFrameDefault + 29444
30 python3.8 0x102dd1d90 function_code_fastcall + 128
31 python3.8 0x102dd59cc method_vectorcall + 332
32 python3.8 0x102dd14c0 PyVectorcall_Call + 120
33 python3.8 0x102fb72fc t_bootstrap + 196
34 python3.8 0x102f49604 pythread_wrapper + 48
35 libsystem_pthread.dylib 0x1b3b95240 _pthread_start + 148
36 libsystem_pthread.dylib 0x1b3b90024 thread_start + 8

Thread 0 crashed with ARM Thread State (64-bit):
x0: 0x0000000105b80000 x1: 0x000000016d055178 x2: 0x0000000000028000 x3: 0x0000000000040012
x4: 0x000000000000000c x5: 0x0000000000000000 x6: 0x0000000000000000 x7: 0x0000000000000000
x8: 0x00000001035ec62c x9: 0x00000001035edea8 x10: 0x0000000000000004 x11: 0x0000000000000001
x12: 0x0000000000000001 x13: 0x0800000000030000 x14: 0x0000000000030000 x15: 0x0000000000000000
x16: 0x00000000000000c5 x17: 0x6ae100016d054958 x18: 0x0000000000000000 x19: 0x000000016d055178
x20: 0x00000001031b0060 x21: 0x0000000000050000 x22: 0x000000000000000c x23: 0x000000016d054c68
x24: 0x0000000000000040 x25: 0x0000000000000000 x26: 0x000000016d0549ec x27: 0x0000000000000000
x28: 0x0000000105b80000 fp: 0x000000016d0545b0 lr: 0x7f6f000103589174
sp: 0x000000016d0545a0 pc: 0x00000001035a7d88 cpsr: 0x00001000
far: 0x0000000105b80000 esr: 0x92000007 (Data Abort) byte read Translation fault

Binary Images:
0x103574000 - 0x1035d3fff dyld () <7e92b284-4b90-3b68-b31a-3ddc4c0e8d40> /usr/lib/dyld
0x102da4000 - 0x103073fff python3.8 (
) <60d73728-b4bc-3469-b887-1dddbc1f5fe3> /Users/USER//python3.8
0x1b3b58000 - 0x1b3b8dfff libsystem_kernel.dylib (
) /usr/lib/system/libsystem_kernel.dylib
0x1b3b8e000 - 0x1b3b9afff libsystem_pthread.dylib () /usr/lib/system/libsystem_pthread.dylib
0x0 - 0xffffffffffffffff ??? (
) <00000000-0000-0000-0000-000000000000> ???

External Modification Summary:
Calls made by other processes targeting this process:
task_for_pid: 0
thread_create: 0
thread_set_state: 0
Calls made by this process:
task_for_pid: 0
thread_create: 0
thread_set_state: 0
Calls made by all processes on this machine:
task_for_pid: 0
thread_create: 0
thread_set_state: 0

VM Region Summary:
ReadOnly portion of Libraries: Total=665.6M resident=0K(0%) swapped_out_or_unallocated=665.6M(100%)
Writable regions: Total=1.1G written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=1.1G(100%)

                            VIRTUAL   REGION 

REGION TYPE SIZE COUNT (non-coalesced)
=========== ======= =======
Activity Tracing 256K 1
Kernel Alloc Once 32K 1
MALLOC 234.2M 31
MALLOC guard page 96K 5
MALLOC_MEDIUM (reserved) 480.0M 4 reserved VM address space (unallocated)
MALLOC_NANO (reserved) 384.0M 1 reserved VM address space (unallocated)
STACK GUARD 32K 2
Stack 32.0M 2
VM_ALLOCATE 1.0G 109
VM_ALLOCATE (reserved) 160K 1 reserved VM address space (unallocated)
__AUTH 221K 46
__AUTH_CONST 2879K 122
__DATA 2027K 161
__DATA_CONST 4508K 169
__DATA_DIRTY 233K 50
__LINKEDIT 578.8M 48
__OBJC_CONST 259K 29
__OBJC_RO 82.0M 1
__OBJC_RW 3104K 1
__TEXT 86.7M 175
__UNICODE 588K 1
dyld private memory 1024K 1
mapped file 1632K 8
shared memory 32K 2
=========== ======= =======
TOTAL 2.9G 971
TOTAL, minus reserved VM space 2.0G 971


Full Report

{"app_name":"python3.8","timestamp":"2022-03-15 14:29:53.00 +1300","app_version":"","slice_uuid":"60d73728-b4bc-3469-b887-1dddbc1f5fe3","build_version":"","platform":1,"share_with_app_devs":0,"is_first_party":1,"bug_type":"309","os_version":"macOS 12.1 (21C52)","incident_id":"0522892B-AE72-4681-811B-B11B506AD059","name":"python3.8"}
{
"uptime" : 620,
"procLaunch" : "2022-03-15 14:29:49.6071 +1300",
"procRole" : "Unspecified",
"version" : 2,
"userID" : 501,
"deployVersion" : 210,
"modelCode" : "MacBookPro18,3",
"procStartAbsTime" : 15019907642,
"coalitionID" : 511,
"osVersion" : {
"train" : "macOS 12.1",
"build" : "21C52",
"releaseType" : "User"
},
"captureTime" : "2022-03-15 14:29:52.0911 +1300",
"incident" : "0522892B-AE72-4681-811B-B11B506AD059",
"bug_type" : "309",
"pid" : 1816,
"procExitAbsTime" : 15079510076,
"translated" : false,
"cpuType" : "ARM-64",
"procName" : "python3.8",
"procPath" : "/Users/USER//python3.8",
"parentProc" : "zsh",
"parentPid" : 567,
"coalitionName" : "com.apple.Terminal",
"crashReporterKey" : "2BE0EFF7-5876-DDD6-578B-D17A0D293236",
"responsiblePid" : 501,
"responsibleProc" : "Terminal",
"sip" : "enabled",
"vmRegionInfo" : "0x105b80000 is in 0x105b80000-0x105ba8000; bytes after start: 0 bytes before end: 163839\n REGION TYPE START - END [ VSIZE] PRT/MAX SHRMOD REGION DETAIL\n mapped file 105b70000-105b80000 [ 64K] r--/rwx SM=COW ...t_id=2f5636f5\n---> mapped file 105b80000-105ba8000 [ 160K] r-x/rwx SM=COW ...t_id=2f5648f5\n VM_ALLOCATE (reserved) 105ba8000-105bd0000 [ 160K] rw-/rwx SM=NUL ...(unallocated)",
"isCorpse" : 1,
"exception" : {"codes":"0x0000000000000032, 0x0000000105b80000","rawCodes":[50,4390912000],"type":"EXC_BAD_ACCESS","signal":"SIGKILL (Code Signature Invalid)","subtype":"UNKNOWN_0x32 at 0x0000000105b80000"},
"termination" : {"namespace":"CODESIGNING","flags":0,"code":2},
"vmregioninfo" : "0x105b80000 is in 0x105b80000-0x105ba8000; bytes after start: 0 bytes before end: 163839\n REGION TYPE START - END [ VSIZE] PRT/MAX SHRMOD REGION DETAIL\n mapped file 105b70000-105b80000 [ 64K] r--/rwx SM=COW ...t_id=2f5636f5\n---> mapped file 105b80000-105ba8000 [ 160K] r-x/rwx SM=COW ...t_id=2f5648f5\n VM_ALLOCATE (reserved) 105ba8000-105bd0000 [ 160K] rw-/rwx SM=NUL ...(unallocated)",
"extMods" : {"caller":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"system":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"targeted":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"warnings":0},
"faultingThread" : 0,
"threads" : [{"triggered":true,"id":18066,"threadState":{"x":[{"value":4390912000},{"value":6124032376},{"value":163840},{"value":262162},{"value":12},{"value":0},{"value":0},{"value":0},{"value":4351510060,"symbolLocation":172,"symbol":"_main_thread"},{"value":4351516328,"symbolLocation":0,"symbol":"errno"},{"value":4},{"value":1},{"value":1},{"value":576460752303620096},{"value":196608},{"value":0},{"value":197},{"value":7701436843904289112},{"value":0},{"value":6124032376},{"value":4347068512},{"value":327680},{"value":12},{"value":6124031080},{"value":64},{"value":0},{"value":6124030444},{"value":0},{"value":4390912000}],"flavor":"ARM_THREAD_STATE64","lr":{"value":9182558169582834036},"cpsr":{"value":4096},"fp":{"value":6124029360},"sp":{"value":6124029344},"esr":{"value":2449473543,"description":"(Data Abort) byte read Translation fault"},"pc":{"value":4351229320,"matchesCrashFrame":1},"far":{"value":4390912000}},"queue":"com.apple.main-thread","frames":[{"imageOffset":212360,"symbol":"dyld3::MachOFile::isMachO(Diagnostics&, unsigned long long) const","symbolLocation":20,"imageIndex":0},{"imageOffset":86388,"symbol":"dyld4::Loader::mapSegments(Diagnostics&, dyld4::RuntimeState&, char const
, unsigned long long, dyld4::Loader::CodeSignatureInFile const&, bool, dyld3::Arraydyld4::Loader::Region const&, bool, bool, dyld4::Loader::FileValidationInfo const&)","symbolLocation":1092,"imageIndex":0},{"imageOffset":86388,"symbol":"dyld4::Loader::mapSegments(Diagnostics&, dyld4::RuntimeState&, char const*, unsigned long long, dyld4::Loader::CodeSignatureInFile const&, bool, dyld3::Arraydyld4::Loader::Region const&, bool, bool, dyld4::Loader::FileValidationInfo const&)","symbolLocation":1092,"imageIndex":0},{"imageOffset":108944,"symbol":"invocation function for block in dyld4::JustInTimeLoader::makeJustInTimeLoaderDisk(Diagnostics&, dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&, bool, unsigned int)","symbolLocation":68,"imageIndex":0},{"imageOffset":107300,"symbol":"dyld4::JustInTimeLoader::withRegions(dyld3::MachOAnalyzer const*, void (dyld3::Arraydyld4::Loader::Region const&) block_pointer)","symbolLocation":292,"imageIndex":0},{"imageOffset":108772,"symbol":"invocation function for block in dyld4::JustInTimeLoader::makeJustInTimeLoaderDisk(Diagnostics&, dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&, bool, unsigned int)","symbolLocation":492,"imageIndex":0},{"imageOffset":129860,"symbol":"dyld4::SyscallDelegate::withReadOnlyMappedFile(Diagnostics&, char const*, bool, void (void const*, unsigned long, bool, dyld4::FileID const&, char const*) block_pointer) const","symbolLocation":128,"imageIndex":0},{"imageOffset":108228,"symbol":"dyld4::JustInTimeLoader::makeJustInTimeLoaderDisk(Diagnostics&, dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&, bool, unsigned int)","symbolLocation":204,"imageIndex":0},{"imageOffset":83328,"symbol":"invocation function for block in dyld4::Loader::getLoader(Diagnostics&, dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&)","symbolLocation":1412,"imageIndex":0},{"imageOffset":79888,"symbol":"dyld4::Loader::forEachResolvedAtPathVar(dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&, dyld4::ProcessConfig::PathOverrides::Type, bool&, void (char const*, dyld4::ProcessConfig::PathOverrides::Type, bool&) block_pointer)","symbolLocation":172,"imageIndex":0},{"imageOffset":79576,"symbol":"invocation function for block in dyld4::Loader::forEachPath(Diagnostics&, dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&, void (char const*, dyld4::ProcessConfig::PathOverrides::Type, bool&) block_pointer)","symbolLocation":116,"imageIndex":0},{"imageOffset":40592,"symbol":"dyld4::ProcessConfig::PathOverrides::forEachPathVariant(char const*, dyld3::Platform, bool, bool&, void (char const*, dyld4::ProcessConfig::PathOverrides::Type, bool&) block_pointer) const","symbolLocation":672,"imageIndex":0},{"imageOffset":79436,"symbol":"dyld4::Loader::forEachPath(Diagnostics&, dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&, void (char const*, dyld4::ProcessConfig::PathOverrides::Type, bool&) block_pointer)","symbolLocation":172,"imageIndex":0},{"imageOffset":81400,"symbol":"dyld4::Loader::getLoader(Diagnostics&, dyld4::RuntimeState&, char const*, dyld4::Loader::LoadOptions const&)","symbolLocation":840,"imageIndex":0},{"imageOffset":100712,"symbol":"invocation function for block in dyld4::JustInTimeLoader::loadDependents(Diagnostics&, dyld4::RuntimeState&, dyld4::Loader::LoadOptions const&)","symbolLocation":380,"imageIndex":0},{"imageOffset":217084,"symbol":"invocation function for block in dyld3::MachOFile::forEachDependentDylib(void (char const*, bool, bool, bool, unsigned int, unsigned int, bool&) block_pointer) const","symbolLocation":148,"imageIndex":0},{"imageOffset":8088,"symbol":"dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void (load_command const*, bool&) block_pointer) const","symbolLocation":168,"imageIndex":0},{"imageOffset":216636,"symbol":"dyld3::MachOFile::forEachDependentDylib(void (char const*, bool, bool, bool, unsigned int, unsigned int, bool&) block_pointer) const","symbolLocation":172,"imageIndex":0},{"imageOffset":100048,"symbol":"dyld4::JustInTimeLoader::loadDependents(Diagnostics&, dyld4::RuntimeState&, dyld4::Loader::LoadOptions const&)","symbolLocation":164,"imageIndex":0},{"imageOffset":154324,"symbol":"invocation function for block in dyld4::APIs::dlopen_from(char const*, int, void*)","symbolLocation":472,"imageIndex":0},{"imageOffset":43556,"symbol":"dyld4::RuntimeState::withLoadersWriteLock(void () block_pointer)","symbolLocation":100,"imageIndex":0},{"imageOffset":153348,"symbol":"dyld4::APIs::dlopen_from(char const*, int, void*)","symbolLocation":464,"imageIndex":0},{"imageOffset":1790936,"symbol":"_PyImport_FindSharedFuncptr","symbolLocation":380,"imageIndex":1},{"imageOffset":1530556,"symbol":"_PyImport_LoadDynamicModuleWithSpec","symbolLocation":1304,"imageIndex":1},{"imageOffset":1525852,"symbol":"_imp_create_dynamic","symbolLocation":456,"imageIndex":1},{"imageOffset":522608,"symbol":"cfunction_vectorcall_FASTCALL","symbolLocation":284,"imageIndex":1},{"imageOffset":185536,"symbol":"PyVectorcall_Call","symbolLocation":120,"imageIndex":1},{"imageOffset":1307416,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":30588,"imageIndex":1},{"imageOffset":1275268,"symbol":"_PyEval_EvalCodeWithName","symbolLocation":3340,"imageIndex":1},{"imageOffset":188176,"symbol":"_PyFunction_Vectorcall","symbolLocation":236,"imageIndex":1},{"imageOffset":1319752,"symbol":"call_function","symbolLocation":528,"imageIndex":1},{"imageOffset":1306300,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":29472,"imageIndex":1},{"imageOffset":187792,"symbol":"function_code_fastcall","symbolLocation":128,"imageIndex":1},{"imageOffset":1319752,"symbol":"call_function","symbolLocation":528,"imageIndex":1},{"imageOffset":1306272,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":29444,"imageIndex":1},{"imageOffset":187792,"symbol":"function_code_fastcall","symbolLocation":128,"imageIndex":1},{"imageOffset":1319752,"symbol":"call_function","symbolLocation":528,"imageIndex":1},{"imageOffset":1306420,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":29592,"imageIndex":1},{"imageOffset":187792,"symbol":"function_code_fastcall","symbolLocation":128,"imageIndex":1},{"imageOffset":1319752,"symbol":"call_function","symbolLocation":528,"imageIndex":1},{"imageOffset":1306420,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":29592,"imageIndex":1},{"imageOffset":187792,"symbol":"function_code_fastcall","symbolLocation":128,"imageIndex":1},{"imageOffset":1319752,"symbol":"call_function","symbolLocation":528,"imageIndex":1},{"imageOffset":1306420,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":29592,"imageIndex":1},{"imageOffset":187792,"symbol":"function_code_fastcall","symbolLocation":128,"imageIndex":1},{"imageOffset":195380,"symbol":"object_vacall","symbolLocation":444,"imageIndex":1},{"imageOffset":195780,"symbol":"_PyObject_CallMethodIdObjArgs","symbolLocation":116,"imageIndex":1},{"imageOffset":1505012,"symbol":"PyImport_ImportModuleLevelObject","symbolLocation":1792,"imageIndex":1},{"imageOffset":1298736,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":21908,"imageIndex":1},{"imageOffset":1275268,"symbol":"_PyEval_EvalCodeWithName","symbolLocation":3340,"imageIndex":1},{"imageOffset":1254992,"symbol":"builtin_exec","symbolLocation":1096,"imageIndex":1},{"imageOffset":522608,"symbol":"cfunction_vectorcall_FASTCALL","symbolLocation":284,"imageIndex":1},{"imageOffset":185536,"symbol":"PyVectorcall_Call","symbolLocation":120,"imageIndex":1},{"imageOffset":1307416,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":30588,"imageIndex":1},{"imageOffset":1275268,"symbol":"_PyEval_EvalCodeWithName","symbolLocation":3340,"imageIndex":1},{"imageOffset":188176,"symbol":"_PyFunction_Vectorcall","symbolLocation":236,"imageIndex":1},{"imageOffset":1319752,"symbol":"call_function","symbolLocation":528,"imageIndex":1},{"imageOffset":1306300,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":29472,"imageIndex":1},{"imageOffset":187792,"symbol":"function_code_fastcall","symbolLocation":128,"imageIndex":1},{"imageOffset":1319752,"symbol":"call_function","symbolLocation":528,"imageIndex":1},{"imageOffset":1306272,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":29444,"imageIndex":1},{"imageOffset":187792,"symbol":"function_code_fastcall","symbolLocation":128,"imageIndex":1},{"imageOffset":1319752,"symbol":"call_function","symbolLocation":528,"imageIndex":1},{"imageOffset":1306420,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":29592,"imageIndex":1},{"imageOffset":187792,"symbol":"function_code_fastcall","symbolLocation":128,"imageIndex":1},{"imageOffset":1319752,"symbol":"call_function","symbolLocation":528,"imageIndex":1},{"imageOffset":1306420,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":29592,"imageIndex":1},{"imageOffset":187792,"symbol":"function_code_fastcall","symbolLocation":128,"imageIndex":1},{"imageOffset":195380,"symbol":"object_vacall","symbolLocation":444,"imageIndex":1},{"imageOffset":195780,"symbol":"_PyObject_CallMethodIdObjArgs","symbolLocation":116,"imageIndex":1},{"imageOffset":1505012,"symbol":"PyImport_ImportModuleLevelObject","symbolLocation":1792,"imageIndex":1},{"imageOffset":1298736,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":21908,"imageIndex":1},{"imageOffset":1275268,"symbol":"_PyEval_EvalCodeWithName","symbolLocation":3340,"imageIndex":1},{"imageOffset":1254992,"symbol":"builtin_exec","symbolLocation":1096,"imageIndex":1},{"imageOffset":522608,"symbol":"cfunction_vectorcall_FASTCALL","symbolLocation":284,"imageIndex":1},{"imageOffset":1319752,"symbol":"call_function","symbolLocation":528,"imageIndex":1},{"imageOffset":1306420,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":29592,"imageIndex":1},{"imageOffset":281916,"symbol":"gen_send_ex","symbolLocation":324,"imageIndex":1},{"imageOffset":1288460,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":11632,"imageIndex":1},{"imageOffset":281916,"symbol":"gen_send_ex","symbolLocation":324,"imageIndex":1},{"imageOffset":1288460,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":11632,"imageIndex":1},{"imageOffset":281916,"symbol":"gen_send_ex","symbolLocation":324,"imageIndex":1},{"imageOffset":244300,"symbol":"method_vectorcall_O","symbolLocation":448,"imageIndex":1},{"imageOffset":1319752,"symbol":"call_function","symbolLocation":528,"imageIndex":1},{"imageOffset":1306272,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":29444,"imageIndex":1},{"imageOffset":187792,"symbol":"function_code_fastcall","symbolLocation":128,"imageIndex":1},{"imageOffset":1319752,"symbol":"call_function","symbolLocation":528,"imageIndex":1},{"imageOffset":1306420,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":29592,"imageIndex":1},{"imageOffset":187792,"symbol":"function_code_fastcall","symbolLocation":128,"imageIndex":1},{"imageOffset":1319752,"symbol":"call_function","symbolLocation":528,"imageIndex":1},{"imageOffset":1306272,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":29444,"imageIndex":1},{"imageOffset":1275268,"symbol":"_PyEval_EvalCodeWithName","symbolLocation":3340,"imageIndex":1},{"imageOffset":188176,"symbol":"_PyFunction_Vectorcall","symbolLocation":236,"imageIndex":1},{"imageOffset":203036,"symbol":"method_vectorcall","symbolLocation":156,"imageIndex":1},{"imageOffset":1319752,"symbol":"call_function","symbolLocation":528,"imageIndex":1},{"imageOffset":1306540,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":29712,"imageIndex":1},{"imageOffset":187792,"symbol":"function_code_fastcall","symbolLocation":128,"imageIndex":1},{"imageOffset":1319752,"symbol":"call_function","symbolLocation":528,"imageIndex":1},{"imageOffset":1306272,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":29444,"imageIndex":1},{"imageOffset":187792,"symbol":"function_code_fastcall","symbolLocation":128,"imageIndex":1},{"imageOffset":1319752,"symbol":"call_function","symbolLocation":528,"imageIndex":1},{"imageOffset":1306272,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":29444,"imageIndex":1},{"imageOffset":187792,"symbol":"function_code_fastcall","symbolLocation":128,"imageIndex":1},{"imageOffset":1319752,"symbol":"call_function","symbolLocation":528,"imageIndex":1},{"imageOffset":1306272,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":29444,"imageIndex":1},{"imageOffset":1275268,"symbol":"_PyEval_EvalCodeWithName","symbolLocation":3340,"imageIndex":1},{"imageOffset":188176,"symbol":"_PyFunction_Vectorcall","symbolLocation":236,"imageIndex":1},{"imageOffset":203400,"symbol":"method_vectorcall","symbolLocation":520,"imageIndex":1},{"imageOffset":185536,"symbol":"PyVectorcall_Call","symbolLocation":120,"imageIndex":1},{"imageOffset":1306956,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":30128,"imageIndex":1},{"imageOffset":1275268,"symbol":"_PyEval_EvalCodeWithName","symbolLocation":3340,"imageIndex":1},{"imageOffset":188176,"symbol":"_PyFunction_Vectorcall","symbolLocation":236,"imageIndex":1},{"imageOffset":1319752,"symbol":"call_function","symbolLocation":528,"imageIndex":1},{"imageOffset":1306420,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":29592,"imageIndex":1},{"imageOffset":1275268,"symbol":"_PyEval_EvalCodeWithName","symbolLocation":3340,"imageIndex":1},{"imageOffset":1642044,"symbol":"PyRun_SimpleFileExFlags","symbolLocation":1052,"imageIndex":1},{"imageOffset":1806000,"symbol":"Py_RunMain","symbolLocation":2980,"imageIndex":1},{"imageOffset":1810600,"symbol":"pymain_main","symbolLocation":1244,"imageIndex":1},{"imageOffset":16864,"symbol":"main","symbolLocation":56,"imageIndex":1},{"imageOffset":20724,"symbol":"start","symbolLocation":520,"imageIndex":0}]},{"id":18077,"frames":[{"imageOffset":20672,"symbol":"__psynch_cvwait","symbolLocation":8,"imageIndex":2},{"imageOffset":30728,"symbol":"_pthread_cond_wait","symbolLocation":1228,"imageIndex":3},{"imageOffset":1727208,"symbol":"PyThread_acquire_lock_timed","symbolLocation":604,"imageIndex":1},{"imageOffset":2178460,"symbol":"acquire_timed","symbolLocation":256,"imageIndex":1},{"imageOffset":2178992,"symbol":"lock_PyThread_acquire_lock","symbolLocation":72,"imageIndex":1},{"imageOffset":242300,"symbol":"method_vectorcall_VARARGS_KEYWORDS","symbolLocation":568,"imageIndex":1},{"imageOffset":1319752,"symbol":"call_function","symbolLocation":528,"imageIndex":1},{"imageOffset":1306272,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":29444,"imageIndex":1},{"imageOffset":1275268,"symbol":"_PyEval_EvalCodeWithName","symbolLocation":3340,"imageIndex":1},{"imageOffset":188176,"symbol":"_PyFunction_Vectorcall","symbolLocation":236,"imageIndex":1},{"imageOffset":1319752,"symbol":"call_function","symbolLocation":528,"imageIndex":1},{"imageOffset":1306272,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":29444,"imageIndex":1},{"imageOffset":1275268,"symbol":"_PyEval_EvalCodeWithName","symbolLocation":3340,"imageIndex":1},{"imageOffset":188176,"symbol":"_PyFunction_Vectorcall","symbolLocation":236,"imageIndex":1},{"imageOffset":1319752,"symbol":"call_function","symbolLocation":528,"imageIndex":1},{"imageOffset":1306272,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":29444,"imageIndex":1},{"imageOffset":187792,"symbol":"function_code_fastcall","symbolLocation":128,"imageIndex":1},{"imageOffset":185536,"symbol":"PyVectorcall_Call","symbolLocation":120,"imageIndex":1},{"imageOffset":1306956,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":30128,"imageIndex":1},{"imageOffset":1275268,"symbol":"_PyEval_EvalCodeWithName","symbolLocation":3340,"imageIndex":1},{"imageOffset":188176,"symbol":"_PyFunction_Vectorcall","symbolLocation":236,"imageIndex":1},{"imageOffset":185536,"symbol":"PyVectorcall_Call","symbolLocation":120,"imageIndex":1},{"imageOffset":1306956,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":30128,"imageIndex":1},{"imageOffset":1275268,"symbol":"_PyEval_EvalCodeWithName","symbolLocation":3340,"imageIndex":1},{"imageOffset":188176,"symbol":"_PyFunction_Vectorcall","symbolLocation":236,"imageIndex":1},{"imageOffset":1319752,"symbol":"call_function","symbolLocation":528,"imageIndex":1},{"imageOffset":1306272,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":29444,"imageIndex":1},{"imageOffset":187792,"symbol":"function_code_fastcall","symbolLocation":128,"imageIndex":1},{"imageOffset":1319752,"symbol":"call_function","symbolLocation":528,"imageIndex":1},{"imageOffset":1306272,"symbol":"_PyEval_EvalFrameDefault","symbolLocation":29444,"imageIndex":1},{"imageOffset":187792,"symbol":"function_code_fastcall","symbolLocation":128,"imageIndex":1},{"imageOffset":203212,"symbol":"method_vectorcall","symbolLocation":332,"imageIndex":1},{"imageOffset":185536,"symbol":"PyVectorcall_Call","symbolLocation":120,"imageIndex":1},{"imageOffset":2175740,"symbol":"t_bootstrap","symbolLocation":196,"imageIndex":1},{"imageOffset":1725956,"symbol":"pythread_wrapper","symbolLocation":48,"imageIndex":1},{"imageOffset":29248,"symbol":"_pthread_start","symbolLocation":148,"imageIndex":3},{"imageOffset":8228,"symbol":"thread_start","symbolLocation":8,"imageIndex":3}]}],
"usedImages" : [
{
"source" : "P",
"arch" : "arm64e",
"base" : 4351016960,
"size" : 393216,
"uuid" : "7e92b284-4b90-3b68-b31a-3ddc4c0e8d40",
"path" : "/usr/lib/dyld",
"name" : "dyld"
},
{
"source" : "P",
"arch" : "arm64",
"base" : 4342824960,
"size" : 2949120,
"uuid" : "60d73728-b4bc-3469-b887-1dddbc1f5fe3",
"path" : "/Users/USER/*/python3.8",
"name" : "python3.8"
},
{
"source" : "P",
"arch" : "arm64e",
"base" : 7309983744,
"size" : 221184,
"uuid" : "c8b3081a-5081-3a99-bbe3-01413de444c6",
"path" : "/usr/lib/system/libsystem_kernel.dylib",
"name" : "libsystem_kernel.dylib"
},
{
"source" : "P",
"arch" : "arm64e",
"base" : 7310204928,
"size" : 53248,
"uuid" : "ed328b18-eeef-3b15-8858-798b19b0c2cd",
"path" : "/usr/lib/system/libsystem_pthread.dylib",
"name" : "libsystem_pthread.dylib"
},
{
"size" : 0,
"source" : "A",
"base" : 0,
"uuid" : "00000000-0000-0000-0000-000000000000"
}
],
"sharedCache" : {
"base" : 7307034624,
"size" : 3089596416,
"uuid" : "66c33c62-48a9-31e5-b8b5-7a71c9760d07"
},
"vmSummary" : "ReadOnly portion of Libraries: Total=665.6M resident=0K(0%) swapped_out_or_unallocated=665.6M(100%)\nWritable regions: Total=1.1G written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=1.1G(100%)\n\n VIRTUAL REGION \nREGION TYPE SIZE COUNT (non-coalesced) \n=========== ======= ======= \nActivity Tracing 256K 1 \nKernel Alloc Once 32K 1 \nMALLOC 234.2M 31 \nMALLOC guard page 96K 5 \nMALLOC_MEDIUM (reserved) 480.0M 4 reserved VM address space (unallocated)\nMALLOC_NANO (reserved) 384.0M 1 reserved VM address space (unallocated)\nSTACK GUARD 32K 2 \nStack 32.0M 2 \nVM_ALLOCATE 1.0G 109 \nVM_ALLOCATE (reserved) 160K 1 reserved VM address space (unallocated)\n__AUTH 221K 46 \n__AUTH_CONST 2879K 122 \n__DATA 2027K 161 \n__DATA_CONST 4508K 169 \n__DATA_DIRTY 233K 50 \n__LINKEDIT 578.8M 48 \n__OBJC_CONST 259K 29 \n__OBJC_RO 82.0M 1 \n__OBJC_RW 3104K 1 \n__TEXT 86.7M 175 \n__UNICODE 588K 1 \ndyld private memory 1024K 1 \nmapped file 1632K 8 \nshared memory 32K 2 \n=========== ======= ======= \nTOTAL 2.9G 971 \nTOTAL, minus reserved VM space 2.0G 971 \n",
"legacyInfo" : {
"threadTriggered" : {
"queue" : "com.apple.main-thread"
}
},
"trialInfo" : {
"rollouts" : [
{
"rolloutId" : "60da5e84ab0ca017dace9abf",
"factorPackIds" : {

  },
  "deploymentId" : 240000008
},
{
  "rolloutId" : "607844aa04477260f58a8077",
  "factorPackIds" : {
    "SIRI_MORPHUN_ASSETS" : "6103050cbfe6dc472e1c982a"
  },
  "deploymentId" : 240000066
},
{
  "rolloutId" : "602ad4dac86151000cf27e46",
  "factorPackIds" : {
    "SIRI_DICTATION_ASSETS" : "61fb0e87c773c43cde3bb80e"
  },
  "deploymentId" : 240000303
},
{
  "rolloutId" : "5ffde50ce2aacd000d47a95f",
  "factorPackIds" : {

  },
  "deploymentId" : 240000119
},
{
  "rolloutId" : "601d9415f79519000ccd4b69",
  "factorPackIds" : {
    "SIRI_TEXT_TO_SPEECH" : "621d4d0f680160486b9e1c98"
  },
  "deploymentId" : 240000412
},
{
  "rolloutId" : "5fc94383418129005b4e9ae0",
  "factorPackIds" : {

  },
  "deploymentId" : 240000274
}

],
"experiments" : [

]
}
}

  • Looking into things a bit more, it turns out that a lot of the libraries in the Frameworks directory are not signed (required for aarch64, but not intel)
  • running codesign --force -s - pymeshlab/Frameworks/*.dylib fixes things
  • after which all the tests run fine. (I suspect @StWiemann didn't run them from the pymeshlab directory)

@alemuntoni
Copy link
Member

alemuntoni commented Mar 15, 2022

Oh ok, thanks @David-Baddeley. Then we will need to sign all the libraries used by pymeshlab when releasing for m1. It shouldn't be an issue.
Let's hope to have news from github actions for having native m1 builds.

@jabruniessner
Copy link

jabruniessner commented Apr 26, 2022

Hey there,

I am just following up on the installation on an M1 chip. I now managed to build the pymeshlab without any errors.
The only problem that I still have is, when I run python3 and then import pymeshlab I get the following error:

File "<stdin>", line 1, in <module> File "/Users/ydreher/Desktop/Desktop/Uni/PhD/Dokumente/ProtocolsAndMacros/ReconstructionProgramState_31.03.2022/Reco. nstructionVersion4/pymeshlab2/PyMeshLab/pymeshlab/__init__.py", line 11, in <module> from .pmeshlab import * ModuleNotFoundError: No module named 'pymeshlab.pmeshlab'

Any idea, where this could be coming from?

@alemuntoni
Copy link
Member

@jabrucohee did you build pymeshlab using the script we provided (this one)? After calling make, you should then call make install, in order to copy the built package into the pymeshlab directory.

@jabruniessner
Copy link

jabruniessner commented Apr 26, 2022

@alemuntoni , I tried both versions once with the script and once by typing cmake .. && make && make install. In both cases I get that error. However, I installed qt5 using Homebrew. Since it couldn't find it at the beginning, I needed to use

cmake -DCMAKE_PREFIX_PATH=/opt/homebrew/opt/qt@5 ..

which directs to the folder where qt5 is installed.

When using the script I added this part to the line

cmake $BUILD_OPTION -DBUILD_DUMMY_BIN_MAC_DEPLOY=ON -DCMAKE_INSTALL_PREFIX=$INSTALL_PATH $BUILD_MESHLAB_OPTION $NIGHTLY_OPTION $SOURCE_PATH

So I used

cmake $BUILD_OPTION -DBUILD_DUMMY_BIN_MAC_DEPLOY=ON -DCMAKE_INSTALL_PREFIX=$INSTALL_PATH -DCMAKE_PREFIX_PATH=/opt/homebrew/opt/qt@5 $BUILD_MESHLAB_OPTION $NIGHTLY_OPTION $SOURCE_PATH

before that it wouldn't built, but than it did

Could this be related ? this is the only. alteration that I made.

I checked and I did run make install

thanks in advance !

@alemuntoni
Copy link
Member

Ok, you should remove from the command the options -DBUILD_DUMMY_BIN_MAC_DEPLOY=ON, you don't need it.
It is used to make a package ready to be deployed, which is not your case.

@jabruniessner
Copy link

Thanks,

I tried that, but no luck unfortunately, the error persists

@sethheon
Copy link

sethheon commented Jun 9, 2022

m1 sillicon pymeshlab pytest success note.

  1. clone repo
    git clone --recursive https://github.com/cnr-isti-vclab/PyMeshLab.git
  2. install qt@5 with homebrew
    brew install qt@5
  3. modify build script (scripts/macOS/1_build.sh) line 77, with custom qt dir and remove -DBUILD_DUMMY_BIN_MAC_DEPLOY flag.
    cmake $BUILD_OPTION -DCMAKE_INSTALL_PREFIX=$INSTALL_PATH -DCMAKE_PREFIX_PATH=/opt/homebrew/opt/qt@5 $BUILD_MESHLAB_O
  4. build
    sh scripts/macOS/1_build.sh
  5. run pytest in PyMeshLab dir.
    pytest --pyargs pymeshlab

Wish this helps someone need.

@jabruniessner
Copy link

Hey there thanks for that comment, it seems to be a different issue entirely. It turns out that Pymeshlab seems to work fine with python version 3.9. but it does not work with python version 3.10. At least not on the mac. If you use python version 3.10 the above mentioned error occurs. With or without the -DBUILD_DUMMY_BIN_MAC_DEPLOY decorator. I don't know where this issue comes from. To those of you have managed to get it to run: which Python version were you using?

Unfortunatley, my application also heavily relies on tkinter which seems to be behaving badly with python version 3.9 in python. So I cannot do anything unfortunately. If somebody mananges to find a fix, that would be greatly appreciated

@flipphillips
Copy link

m1 sillicon pymeshlab pytest success note.
[...]
Wish this helps someone need.

The new 1_build uses Ninja and, at least after a bunch of fooling about, I still can't quite get it to build. There are a lot of LAPACK references that it complains about, a few things I had to fix in the Lib3ds make and so on. Close, but no cigar. Just a FYI

@n1ckfg
Copy link

n1ckfg commented Nov 4, 2023

Was anyone able to get it to build with Python 3.10?

@alemuntoni
Copy link
Member

Just an update here: Issue actions/runner-images#2187 has been closed since M1 large runners have been released. However, large runners are available only for paying accounts.
In this discussion github actions maintainers say that they will start to work on non-large m1 runners at some point, but there is no roadmap right now.

Anyway, for the next version, I'll build a package and release it for m1 (probably just for one version of python, like 3.11)

@n1ckfg
Copy link

n1ckfg commented Nov 16, 2023

That would be amazing. If it's only practical to do one Python version, would you be open to doing 3.10 to keep pymeshlab in sync with Blender's standalone Python module (which for the current, next, and latest LTS versions only works with 3.10)?

@alemuntoni
Copy link
Member

Hi everybody,

After trying and crying a lot, I finally got some native arm wheels of pymeshlab.
I have uploaded them as assets of the latest release here.

Before uploading them on PyPi, I would like to get some feedback from you. It would be really appreciated.

If you can, please download the right wheel for your python version, and then run pip install pymeshlab*.whl.
And let me know if it works (at least, if the library is imported correctly, and if the basic features like loading/saving meshes work).

Thank you everybody for the help!

@n1ckfg
Copy link

n1ckfg commented Dec 19, 2023

Amazing! Can't import it yet, there seems to be a Qt linking error. I'm on Ventura 13.6, tried installing pyqt5 and pyqt using brew but no change.
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/nick/.pyenv/versions/3.10.13/lib/python3.10/site-packages/pymeshlab/__init__.py", line 11, in <module> from .pmeshlab import * ImportError: dlopen(/Users/nick/.pyenv/versions/3.10.13/lib/python3.10/site-packages/pymeshlab/pmeshlab.cpython-310-darwin.so, 0x0002): Symbol not found: __ZTVNSt3__13pmr25monotonic_buffer_resourceE Referenced from: <2421DF8C-7779-32B7-AA75-E276668C9B50> /Users/nick/.pyenv/versions/3.10.13/lib/python3.10/site-packages/pymeshlab/Frameworks/QtXml.framework/Versions/5/QtXml Expected in: <3EE92404-8FC3-374B-A598-D5C9A8CD64B5> /usr/lib/libc++.1.dylib

@alemuntoni
Copy link
Member

@n1ckfg thanks! I guess I'll have to cry some more... :D
In the meantime, could you check whether installing qt@5 from brew solves the issue?
I was on Sonoma when I built pymeshlab, but I hope this won't be a problem...

@n1ckfg
Copy link

n1ckfg commented Dec 20, 2023

Sure--what's the exact install string you'd like to try? I've already tried brew install pyqt5 and brew install pyqt.

@alemuntoni
Copy link
Member

@n1ckfg brew install qt@5

@n1ckfg
Copy link

n1ckfg commented Dec 20, 2023

Tried qt@5 and adding to path in .bash_profile, no luck. This suggests upgrading to Sonoma as a fix:
https://forum.qt.io/topic/149842/qt-6-5-2-build-crash-after-update-to-macos14-sdk/3

@alemuntoni
Copy link
Member

Thanks @n1ckfg!
That's annoying... I'll check if it is possible to downgrade and I'll try to build the wheel again.
But I won't be able to do it this year..

@n1ckfg
Copy link

n1ckfg commented Dec 20, 2023

Thanks--I upgraded to Sonoma and it does import, load, and save correctly! Filters seem to partly work too, if called by function name. Using apply_filter() with a string crashes to bash with Bus error: 10

@kgantchev
Copy link

In this discussion github actions maintainers say that they will start to work on non-large m1 runners at some point, but there is no roadmap right now.

You can use FlyCI's M1 and M2 runners. Our runners are on average 2x faster and 2x cheaper than GitHub's AND we have a free tier for OSS projects (see below).

Install Instructrions

Easily replace your M1 runners:

jobs:
 ci:
-    runs-on: macos-latest
+    runs-on: flyci-macos-large-latest-m1
   steps:
   - name: 👀 Checkout repo
     uses: actions/checkout@v4

Or try the M2 runners:

jobs:
  ci:
-    runs-on: macos-latest
+    runs-on: flyci-macos-large-latest-m2
    steps:
      - name: 👀 Checkout repo
        uses: actions/checkout@v4

Pricing

Processor vCPU RAM (GB) Storage Label Price on FlyCI Price on GitHub
M1 4 7 28 GB flyci-macos-large-latest-m1 $0.06 -
M1 8 14 28 GB flyci-macos-xlarge-latest-m1 $0.12 $0.16
M2 4 7 28 GB flyci-macos-large-latest-m2 $0.08 -
M2 8 14 28 GB flyci-macos-xlarge-latest-m2 $0.16 -

500 mins/month Free for Public Repos

If your repo is public, then FlyCI offers 500 mins/month of free M1 runner usage with the flyci-macos-large-latest-m1 runner.

Best Regards,
Kiril Gantchev
CEO and co-founder of FlyCI

@alemuntoni
Copy link
Member

I have created a native PyMeshLab release using github actions, that you can download from here (choose the wheel based on your Python version): https://github.com/alemuntoni/PyMeshLab/releases/tag/v2024.3

Please try it and let me know if you encounter any problems!

Starting from the next release, pymeshlab will be available for download from pip also for Mac M1.

@n1ckfg
Copy link

n1ckfg commented Mar 15, 2024

Trying it out now--thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

9 participants