微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在运行 python setup.py

如何解决在运行 python setup.py

当我想编译带有一些 C++ 扩展的 python 包时,我很难理解如何选择编译器及其标志。我在我的 Windows 机器上使用 py setup.py build_ext --inplace --force 运行它。根据我是从 PowerShell 还是从 x86 Native Tools Command Prompt for VS 2017 运行脚本,我会得到不同的编译器。 使用 PowerShell:

C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.27.29110\bin\HostX86\x86\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MT -IC ...

使用适用于 VS 2017 的 x86 本机工具:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\HostX86\x86\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MT -IC ...

在这两种情况下都使用了标志 /MT 我想用 /MD 编译代码

这就是 setup.py 的样子:

import setuptools
from numpy.distutils.core import setup
from numpy.distutils.misc_util import Configuration
from distutils.extension import Extension
from Cython.Build import cythonize
import numpy
import os.path
import sys

config = Configuration()

utils_dir = "project_name/systems/cppsystems/utils"
utils_files = os.listdir(utils_dir)
utils_files = [x.lower() for x in utils_files]
utils_files = filter(lambda x: x.endswith("cpp") or x.endswith("c"),utils_files)
utils_files = [os.path.join(utils_dir,x) for x in utils_files]
config.add_include_dirs([utils_dir,])
config.add_library("utils",utils_files)

extensions = [ Extension("project_name.systems.cppsystems.part1",list_of_files,language="c++",include_dirs=some_dirs,library_dirs=some_other_dirs,libraries= some_libs+['utils'],),Extension("project_name.systems.cppsystems.part2",list_of_files2,include_dirs=some_dirs2,library_dirs=some_other_dirs2,libraries= some_libs2+['utils'],)
              ]
setup(
    name="project_name",version="1.0.0",ext_modules=cythonize(extensions),packages=setuptools.find_packages(),install_requires = required,**config.todict()
    
)

对于扩展,我可以添加一个 extra_compile_args = ["-MD"],然后我会收到如下警告:

cl:命令行警告 D9025:用“/MD”覆盖“/MT”

但我不知道如何为我的 utils 包设置它。然而,为每个包设置这个额外的参数似乎是错误的路径,我更喜欢从一开始就使用正确的。有什么建议吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。