我有一个 C++ 项目,我已经成功地使用了 python 和 PyPI。我的问题是,当使用 setuptools 构建多个扩展时,从 swig 生成的二进制文件未存储在相应的模块目录中。以下是运行
setup.py
脚本后我的项目中文件结构的示例。
example_project/
├── setup.py
├── _module1.cpython-310-x86_64-linux-gnu.so
├── _module2.cpython-310-x86_64-linux-gnu.so
├── _module3.cpython-310-x86_64-linux-gnu.so
└── pyAPI/
├── module1/
│ ├── __init__.py
│ ├── module1.i
│ └── module1.py
├── module2/
│ ├── __init__.py
│ ├── module2.i
│ └── module2.py
└── module3/
├── __init__.py
├── module3.i
└── module3.py
有没有办法将生成的文件保留在与其相关的文件夹中,例如这样:
example_project/
├── setup.py
└── pyAPI/
├── module1/
│ ├── __init__.py
│ ├── module1.i
│ ├── module1.py
│ └── _module1.cpython-310-x86_64-linux-gnu.so
├── module2/
│ ├── __init__.py
│ ├── module2.i
│ ├── module2.py
│ └── _module2.cpython-310-x86_64-linux-gnu.so
└── module3/
├── __init__.py
├── module3.i
├── module3.py
└── _module3.cpython-310-x86_64-linux-gnu.so
我的
setup.py
文件不包含任何花哨的内容,我只是声明扩展源文件和 swig_opts 然后用 ext_modules=[module1,module2,module3]
调用它们
根据https://setuptools.pypa.io/en/latest/userguide/ext_modules.html 您可以将子包作为 Python 点名称包含在扩展的命名约定中。
因此,
Extension(name="...")
您的情况下的每个扩展应该是 PyAPI.module1._module1、PyAPI.module2._module2 等。