使distutils将编译后的扩展名放在正确的文件夹中

问题描述 投票:0回答:1

我写了一个Python C扩展,我正在用distutils构建。这是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文件导入?

python distutils
1个回答
1
投票

distutils应该做那项工作。

它不应该。建筑只是包装,安装和使用的中间阶段。

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

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

或者您可以尝试弯曲distutils:

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},
    …
)

但是你必须决定在哪里移动已编译的模块。

© www.soinside.com 2019 - 2024. All rights reserved.