使distutils将编译后的扩展放在右折处

2024-04-25 20:10:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我用distutils编写了一个pythonc扩展。这是setup.py

from distutils.core import setup, Extension

utilsmodule = Extension('utils', sources = ['utilsmodule.c'])

setup (name = 'myPackage',
       version = '1.0',
       description = 'My package',
       ext_modules = [utilsmodule])

当我运行python setup.y build时,扩展是正确构建的,但是.pyd文件放入文件夹build/lib.win-amd64-3.7,而不是放在Python查找要导入的模块的根目录中。在构建之后,我需要将该文件移出build,以便能够导入它。在

我考虑过在setup()后面添加一行来移动文件,但是这看起来有点脏,我想distutils应该可以完成这项工作。在

编译扩展的正确方法是什么,以便在构建后立即由其他Python文件导入它?在


Tags: 文件namefrompycoreimportbuildsetup
1条回答
网友
1楼 · 发布于 2024-04-25 20:10:59

distutils should do that work.

建筑只是包装、安装和使用的中间阶段。在

What is the right way to compile an extension in a way that it can be imported by other Python files immediately after build?

没有这样的方法。您可以将%PYTHONPATH%设置为指向build/lib.win-amd64-3.7,并直接从build/导入模块。在

或者你可以试着弯曲头发:

from distutils.core import setup
from distutils.command.build_ext import build_ext as _build_ext
import os

class build_ext(_build_ext):
    def run(self):
        _build_ext.run(self)
        os.rename("build/lib.win-amd64-3.7/%s" % mypydname, dest_dir)

setup(
    …
    cmdclass={'build_ext': build_ext},
    …
)

但无论如何你都得决定把编译好的模块移到哪里去。在

相关问题 更多 >