Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将cpp文件添加到setuptools,但不要';不编译_Python_Pytorch_Setuptools - Fatal编程技术网

Python 将cpp文件添加到setuptools,但不要';不编译

Python 将cpp文件添加到setuptools,但不要';不编译,python,pytorch,setuptools,Python,Pytorch,Setuptools,我有一个库,我想发布到pyPI,其中包含python代码和C++代码。特别的是,C++代码通过NIJA加载,使用< /P> from torch.utils.cpp_extension import load lib_dir = os.path.dirname(os.path.realpath(__file__)) backend = load( name="backend", sources=[os.path.join(lib_dir, "backend

我有一个库,我想发布到pyPI,其中包含python代码和C++代码。特别的是,C++代码通过NIJA加载,使用< /P>
from torch.utils.cpp_extension import load

lib_dir = os.path.dirname(os.path.realpath(__file__))
backend = load(
  name="backend",
  sources=[os.path.join(lib_dir, "backend.cpp")],
  verbose=True)
我的布局:

package_name/
  package_name/
    __init__.py
    package.py
    backend.cpp
上面的代码位于
package.py
的顶部。如果在本地进行测试,它可以完美地工作并动态编译

但是使用pypi打包时,不会添加
.cpp
文件。My
setup.py

setup(
  name='package_name',
  packages=['package_name'],
  ...)
setup(
  name='package_name',
  packages=['package_name'],
  ext_modules=[CppExtension(
    name='backend',
    sources=['package_name/backend.cpp']),
  ],
  cmdclass={'build_ext': BuildExtension.with_options(use_ninja=True)},
  ...
我试过:

  • .cpp
    添加为
    扩展名
    。这会导致
    setuptools
    尝试编译
    backend.cpp
    ,我不希望这样,因为它无法工作(缺少标题)
  • 通过
    脚本=
    添加
    .cpp
    。似乎什么都没做

编辑文件显示在生成的
.tar.gz
中(在
dist/
中)。如果我从pypi下载的话。但是如果我执行
pip安装
,它将不会显示在磁盘上:

>tar tvf dist/package_name-0.1.0.tar.gz
...
drwxr-xr-x 0 fabian staff 0 11月14日10:17包裹名称-0.1.0/包裹名称/
-rw-r--r--0 fabian staff 203 11月14日09:36 package\u name-0.1.0/package\u name/\uuuuu init\uuuuu.py
-rw-r--r--0 fabian staff 5569 11月14日09:36 package_name-0.1.0/package_name/package.py
-rw-r--r--0 fabian staff 10101 11月12日14:43 package_name-0.1.0/package_name/backend.cpp
...
>ls/Users/../miniconda3/envs/testing/lib/python3.8/site-packages/package\u name/
__初始值
__pycache__
package.py

编辑2:越来越疯狂了。我试图将以下内容添加到
setup.py

setup(
  name='package_name',
  packages=['package_name'],
  ...)
setup(
  name='package_name',
  packages=['package_name'],
  ext_modules=[CppExtension(
    name='backend',
    sources=['package_name/backend.cpp']),
  ],
  cmdclass={'build_ext': BuildExtension.with_options(use_ninja=True)},
  ...

现在它正在建造中。但是它仍然没有将
.cpp
文件添加到输出中。

好的,这是一个相当困难的过程。我不知道是什么使它最终起作用,但以下几点起作用:

将C++文件放入子文件夹中。我使用以下结构:
  • 使用
    find_packages()
    (非常确定这不是必需的)。最终
    setup.py

  • 注意:在
    setup.py
    中没有
    package\u dir
    package\u数据
    数据文件
    。没有
    cpp扩展名
    (我们希望动态构建.cpp!)。没有
    清单。在

    好的,那真是一段旅程。我不知道是什么使它最终起作用,但以下几点起作用:

    将C++文件放入子文件夹中。我使用以下结构:
  • 使用
    find_packages()
    (非常确定这不是必需的)。最终
    setup.py
  • 注意:在
    setup.py
    中没有
    package\u dir
    package\u数据
    数据文件
    。没有
    cpp扩展名
    (我们希望动态构建.cpp!)。在中没有
    清单