c++ 使用SWIG构建Python包失败

esyap4oy  于 5个月前  发布在  Python
关注(0)|答案(1)|浏览(84)

我想用SWIG C++绑定创建一个本地Python包。然而,我在过程的最后一步没有成功,我需要调用pip install -e .。到目前为止,我的setup.py有以下设置:

from distutils.core import setup, Extension

import os
import sys
import shutil
from sys import platform

if platform == "darwin":
    IRDLIB_PATH = "/Users/john/Documents/GitHub/IRDLIB/IRDLIB/time"
    IRDLIB_SWIG_PATH = "/Users/john/Documents/GitHub/IRDLIB/IRDLIB-SWIG/SWIG"

    # Clean build
    for file in os.listdir(IRDLIB_SWIG_PATH + "/date"):
        if file in ["__init__.py", "test.ipynb", "__pycache__"]:
            continue
        else:
            os.remove(IRDLIB_SWIG_PATH + "/date/" + file)
    os.system(
        "swig -c++ -python -I" + IRDLIB_PATH + " -outdir " + IRDLIB_SWIG_PATH + "/date"
        " -o "
        + IRDLIB_SWIG_PATH
        + "/date/date_wrap.cpp "
        + IRDLIB_SWIG_PATH
        + "/date.i"
    )
    name = "date"  # name of the module
    version = "1.0"  # the module's version number
    setup(
        name=name,
        version=version,
        py_modules=["SWIG.date.__init__", "SWIG.date.date"],
        include_dirs=[IRDLIB_PATH],
        ext_modules=[
            Extension(
                "SWIG.date._date",
                ["SWIG/date/date_wrap.cpp", IRDLIB_PATH + "/date.cpp"],
                include_dirs=[IRDLIB_PATH],
                depends=[IRDLIB_PATH + "/date.hpp"],
            )
        ],
    )

字符串
我的文件夹结构如上传的image中所示。当我执行pip install -e .时,我没有问题,并且绑定仅在我位于日期文件夹中时才工作,正如预期的那样。但是,它在该文件夹之外不工作,即,如果我使用

import date


例如在IRDLIB/time中,我会得到模块错误。我需要采取什么步骤才能使它与pip全局协同工作?
我试图调查这个网站上类似的职位,但我没有发现成功。提前感谢。

s4n0splo

s4n0splo1#

我一定是在创建目录的时候自己漏掉了它,但是setup.py文件在错误的路径中。因此导致了这个问题。如果我把它移到SWIG中,它就编译成功了。

相关问题