в моей команде у нас есть общая папка в репо с некоторыми инструментами:
python
├─ wrapper_lib1
│ ├─ include/cpp_lib1.h
│ ├─ src/cpp_lib1.cpp
│ ├─ setup.py
│ ├─ cpp_lib1.i
│
├─
common
├─ cpp_lib1
│ ├─ include/cpp_lib1.h
│ ├─ src/cpp_lib1.cpp
├─ cpp_lib2
├─ ....
Для некоторых из этих инструментов нам нужны python оболочки. Я получил и запустил первую python оболочку (на основе swig) (см. Wrapper_lib1), и я могу установить ее с pip3 install -e path/to/wrapper
.
Моя проблема в том, что текущее решение основано на копии . cpp и .h файл библиотеки cpp и что я могу установить его только с опцией -e
. Когда я пытаюсь использовать относительные пути из папки python в общую папку, это больше не работает. Есть ли способ использовать относительные пути в setup.py для использования с Swig? Или лучше, чем дублировать код?
Вот мой setup.py:
from setuptools import setup, Extension
from distutils.command.build import build
class CustomBuild(build):
sub_commands = [
('build_ext', build.has_ext_modules),
('build_py', build.has_pure_modules),
('build_clib', build.has_c_libraries),
('build_scripts', build.has_scripts),
]
wrapper_lib1_module = Extension('_wrapper_lib1',
sources=['cpp_lib1.i', 'src/cpp_lib1.cpp'],
include_dirs=['include/'],
swig_opts=['-modern', '-py3', '-c++'],
)
# this doesn't work, but that's what I want
# wrapper_lib1_module = Extension('_wrapper_lib1',
# sources=['cpp_lib1.i', '../../common/cpp_lib1/src/cpp_lib1.cpp'],
# include_dirs=['../../common/cpp_lib1/include'],
# swig_opts=['-modern', '-py3', '-c++'],
# )
setup(name='wrapper_lib1',
version='1.0',
maintainer='maintainer',
maintainer_email='maintainer_email',
description='description',
long_description="""
long description
""",
cmdclass={'build': CustomBuild},
ext_modules=[wrapper_lib1_module],
py_modules=['wrapper_lib1'],
python_requires='>=3.6',
)
Заранее спасибо!