Используйте относительные пути в setup.py для генерации swig - PullRequest
0 голосов
/ 24 февраля 2020

в моей команде у нас есть общая папка в репо с некоторыми инструментами:

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',
      )

Заранее спасибо!

...