Skip to content

Module Builds Without Attributes #200

@canadian-club

Description

@canadian-club

Following the instructions I am able to build and import the python module. However the module is missing all attributes (add, docs, subtract),

  1. Cloned the repo
  2. Open powershell v7.5.4 Run pip install ./scikit_build_example (pip version 26.0.1)
  3. Run python (version 3.14)
  4. import scikit_build_example
  5. scikit_build_example.add(1,2)
  6. receive error: AttributeError: module 'scikit_build_example' has no attribute 'add'

Theorized that it may have to do with how pybind11 is linked

  1. placed pybind11 in submodule scikit_build_example/extern/pybind11
  2. commented line 14 in CMakeLists.txt
  3. added line: "add_subdirectory(extern/pybind11)
  4. Open powershell run pip install ./scikit_build_example
    pip uninstalled scikit_build_example-0.0.1
    pip installed scikit_build_example-0.01
  5. Run python
    6.import scikit_build_example
  6. scikit_build_example.add(1,2)
  7. receive error: AttributeError: module 'scikit_build_example' has no attribute 'add'

For both cases the python dir(module) command output line
dir(scikit_build_example)
['doc', 'file', 'loader', 'name', 'package', 'path', 'spec']

Nox log has been attached

nox_log.txt

Help would be appreciated in resolving this issue

*Edit: Solution

  1. I have a python version with path name "python" and a different version with "py"
    used the command python -m pip install, with python -m pip list to ensure the package existed in the correct version
  2. Using the pip uninstall command the output:
    *\python314\lib\site-packages\hello-0.0.1.dist-info*
    *\python314\lib\site-packages\hello_core.cp314-win_amd64.pyd
    gave me a clue that the attributes were being stored in a second location. Issue Single module package? #63 contained the final clue to the naming convention to get access to the attributes

The automatically generated signatures of the class functions contain then something like packagename.modulename.classname

Therefore in order to get access to the defined attributes and follow the tutorial the import statement must be

import scikit_build_example._core
scikit_build_example._core.add(1,2)

'dir(scikit_build_example._core)'
['doc', 'file', 'loader', 'name', 'package', 'spec', 'version', 'add', 'subtract']

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions