Python 3.x distutils包含带有相对路径的\u dirs? 我有一个C++包,我在一段时间之前把它内置到Python扩展中。现在我想把它正确地组织在distutils下。(在Windows 7上使用Python 3.6.2(一个全新的安装)以下是我的setup.py,到目前为止: from distutils.core import setup, Extension drawbox_module = Extension( "drawbox", include_dirs = ['..\Drawbox Library', '..\Drawbox Tools'], sources = ["PyDrawbox.cpp", 'Drawbox.Win.cpp']) setup(name="drawbox", version="1.0", ext_modules= [drawbox_module])

Python 3.x distutils包含带有相对路径的\u dirs? 我有一个C++包,我在一段时间之前把它内置到Python扩展中。现在我想把它正确地组织在distutils下。(在Windows 7上使用Python 3.6.2(一个全新的安装)以下是我的setup.py,到目前为止: from distutils.core import setup, Extension drawbox_module = Extension( "drawbox", include_dirs = ['..\Drawbox Library', '..\Drawbox Tools'], sources = ["PyDrawbox.cpp", 'Drawbox.Win.cpp']) setup(name="drawbox", version="1.0", ext_modules= [drawbox_module]),python-3.x,distutils,Python 3.x,Distutils,但是,当我实际尝试构建时,它似乎忽略了我的include目录,它们根本不在它生成的命令行中: C:\Users\Ken\Desktop\Drawbox\Python36 backup>py setup.py build running build running build_ext building 'drawbox' extension C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.exe

但是,当我实际尝试构建时,它似乎忽略了我的include目录,它们根本不在它生成的命令行中:

C:\Users\Ken\Desktop\Drawbox\Python36 backup>py setup.py build
running build
running build_ext
building 'drawbox' extension
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.exe /c /
nologo /Ox /W3 /GL /DNDEBUG /MD -IC:\Python36\include -IC:\Python36\include "-IC
:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" "-IC:\Program Fil
es (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\INCLUDE" "-IC:\Program Files (x8
6)\Windows Kits\10\include\10.0.14393.0\ucrt" "-IC:\Program Files (x86)\Windows
Kits\NETFXSDK\4.6.1\include\um" "-IC:\Program Files (x86)\Windows Kits\10\includ
e\10.0.14393.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.14
393.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\winrt"
/EHsc /TpPyDrawbox.cpp /Fobuild\temp.win-amd64-3.6\Release\PyDrawbox.obj
PyDrawbox.cpp
PyDrawbox.cpp(2): fatal error C1083: Cannot open include file: 'Drawbox.h': No s
uch file or directory
包含文件就在那里,很好:

C:\Users\Ken\Desktop\Drawbox\Python36 backup>dir "..\Drawbox Library"
 Directory of C:\Users\Ken\Desktop\Drawbox\Drawbox Library

07/21/2014  07:11 PM    <DIR>          .
07/21/2014  07:11 PM    <DIR>          ..
07/26/2001  08:45 AM             1,407 Color.cpp
05/19/2005  08:00 AM             5,129 Color.h
06/29/2002  11:33 AM           117,028 Drawbox.68K.Lib
01/23/2008  03:33 AM            29,915 Drawbox.h
. . .
C:\Users\Ken\Desktop\Drawbox\Python36 backup>dir.。\Drawbox库
C:\Users\Ken\Desktop\Drawbox\Drawbox库的目录
2014年7月21日晚上7:11。
2014年7月21日晚上7:11。。
07/26/2001 08:45 AM 1407 Color.cpp
05/19/2005 08:00 AM 5129 Color.h
2002年6月29日11:33 AM 117028 Drawbox.68K.Lib
01/23/2008 03:33 AM 29915 Drawbox.h
. . .
你知道为什么我的include目录被忽略了吗?使用这些目录的相对路径是否有问题

如果有人想看得更深入,下面是打开DISTUTILS\u DEBUG时的输出:

C:\Users\Ken\Desktop\Drawbox\Python36 backup>set DISTUTILS_DEBUG=1

C:\Users\Ken\Desktop\Drawbox\Python36 backup>py setup.py build
options (after parsing config files):
options (after parsing command line):
option dict for 'build' command:
  {}
running build
Distribution.get_command_obj(): creating 'build' command object
running build_ext
Distribution.get_command_obj(): creating 'build_ext' command object
building 'drawbox' extension
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.exe /c /
nologo /Ox /W3 /GL /DNDEBUG /MD -IC:\Python36\include -IC:\Python36\include "-IC
:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" "-IC:\Program Fil
es (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\INCLUDE" "-IC:\Program Files (x8
6)\Windows Kits\10\include\10.0.14393.0\ucrt" "-IC:\Program Files (x86)\Windows
Kits\NETFXSDK\4.6.1\include\um" "-IC:\Program Files (x86)\Windows Kits\10\includ
e\10.0.14393.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.14
393.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\winrt"
/EHsc /TpPyDrawbox.cpp /Fobuild\temp.win-amd64-3.6\Release\PyDrawbox.obj
PyDrawbox.cpp
PyDrawbox.cpp(2): fatal error C1083: Cannot open include file: 'Drawbox.h': No s
uch file or directory
Traceback (most recent call last):
  File "C:\Python36\lib\distutils\_msvccompiler.py", line 382, in compile
    self.spawn(args)
  File "C:\Python36\lib\distutils\_msvccompiler.py", line 501, in spawn
    return super().spawn(cmd)
  File "C:\Python36\lib\distutils\ccompiler.py", line 909, in spawn
    spawn(cmd, dry_run=self.dry_run)
  File "C:\Python36\lib\distutils\spawn.py", line 38, in spawn
    _spawn_nt(cmd, search_path, dry_run=dry_run)
  File "C:\Python36\lib\distutils\spawn.py", line 81, in _spawn_nt
    "command %r failed with exit status %d" % (cmd, rc))
distutils.errors.DistutilsExecError: command ['"C:\\Program Files (x86)\\Microso
ft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\cl.exe"', '/c', '/nologo', '/Ox', '/W
3', '/GL', '/DNDEBUG', '/MD', '-IC:\\Python36\\include', '-IC:\\Python36\\includ
e', '"-IC:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\INCLUDE"', '"
-IC:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\ATLMFC\\INCLUDE"',
'"-IC:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.14393.0\\ucrt"', '"
-IC:\\Program Files (x86)\\Windows Kits\\NETFXSDK\\4.6.1\\include\\um"', '"-IC:\
\Program Files (x86)\\Windows Kits\\10\\include\\10.0.14393.0\\shared"', '"-IC:\
\Program Files (x86)\\Windows Kits\\10\\include\\10.0.14393.0\\um"', '"-IC:\\Pro
gram Files (x86)\\Windows Kits\\10\\include\\10.0.14393.0\\winrt"', '/EHsc', '/T
pPyDrawbox.cpp', '/Fobuild\\temp.win-amd64-3.6\\Release\\PyDrawbox.obj'] failed
with exit status 2

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "setup.py", line 7, in <module>
    ext_modules= [drawbox_module])
  File "C:\Python36\lib\distutils\core.py", line 148, in setup
    dist.run_commands()
  File "C:\Python36\lib\distutils\dist.py", line 955, in run_commands
    self.run_command(cmd)
  File "C:\Python36\lib\distutils\dist.py", line 974, in run_command
    cmd_obj.run()
  File "C:\Python36\lib\distutils\command\build.py", line 135, in run
    self.run_command(cmd_name)
  File "C:\Python36\lib\distutils\cmd.py", line 313, in run_command
    self.distribution.run_command(command)
  File "C:\Python36\lib\distutils\dist.py", line 974, in run_command
    cmd_obj.run()
  File "C:\Python36\lib\distutils\command\build_ext.py", line 339, in run
    self.build_extensions()
  File "C:\Python36\lib\distutils\command\build_ext.py", line 448, in build_exte
nsions
    self._build_extensions_serial()
  File "C:\Python36\lib\distutils\command\build_ext.py", line 473, in _build_ext
ensions_serial
    self.build_extension(ext)
  File "C:\Python36\lib\distutils\command\build_ext.py", line 533, in build_exte
nsion
    depends=ext.depends)
  File "C:\Python36\lib\distutils\_msvccompiler.py", line 384, in compile
    raise CompileError(msg)
distutils.errors.CompileError: command ['"C:\\Program Files (x86)\\Microsoft Vis
ual Studio 14.0\\VC\\BIN\\x86_amd64\\cl.exe"', '/c', '/nologo', '/Ox', '/W3', '/
GL', '/DNDEBUG', '/MD', '-IC:\\Python36\\include', '-IC:\\Python36\\include', '"
-IC:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\INCLUDE"', '"-IC:\\
Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\ATLMFC\\INCLUDE"', '"-IC:
\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.14393.0\\ucrt"', '"-IC:\\
Program Files (x86)\\Windows Kits\\NETFXSDK\\4.6.1\\include\\um"', '"-IC:\\Progr
am Files (x86)\\Windows Kits\\10\\include\\10.0.14393.0\\shared"', '"-IC:\\Progr
am Files (x86)\\Windows Kits\\10\\include\\10.0.14393.0\\um"', '"-IC:\\Program F
iles (x86)\\Windows Kits\\10\\include\\10.0.14393.0\\winrt"', '/EHsc', '/TpPyDra
wbox.cpp', '/Fobuild\\temp.win-amd64-3.6\\Release\\PyDrawbox.obj'] failed with e
xit status 2
C:\Users\Ken\Desktop\Drawbox\Python36 backup>set DISTUTILS\u DEBUG=1
C:\Users\Ken\Desktop\Drawbox\Python36 backup>py setup.py build
选项(解析配置文件后):
选项(在分析命令行之后):
“build”命令的选项dict:
{}
运行构建
Distribution.get_command_obj():创建“build”命令对象
运行build_ext
Distribution.get_command_obj():创建“build_ext”命令对象
建筑“抽屉”扩建部分
C:\ProgramFiles(x86)\Microsoft Visual Studio 14.0\VC\BIN\x86\u amd64\cl.exe/C/
nologo/Ox/W3/GL/DNDEBUG/MD-IC:\Python36\include-IC:\Python36\include“-IC
:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\INCLUDE”“-IC:\Program Fil
es(x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\INCLUDE”“-IC:\Program Files(x8)
6) \Windows工具包\10\包括\10.0.14393.0\ucrt”“-IC:\Program Files(x86)\Windows
Kits\NETFXSDK\4.6.1\include\um”“-IC:\Program Files(x86)\Windows Kits\10\include
e\10.0.14393.0\shared”“-IC:\Program Files(x86)\Windows Kits\10\include\10.0.14
393.0\um”“-IC:\Program Files(x86)\Windows Kits\10\include\10.0.14393.0\winrt”
/EHsc/TpPyDrawbox.cpp/Fobuild\temp.win-amd64-3.6\Release\PyDrawbox.obj
PyDrawbox.cpp
PyDrawbox.cpp(2):致命错误C1083:无法打开包含文件:“Drawbox.h”:没有
uch文件或目录
回溯(最近一次呼叫最后一次):
文件“C:\Python36\lib\distutils\\u msvccompiler.py”,第382行,在compile中
自我繁殖(args)
文件“C:\Python36\lib\distutils\\u msvccompiler.py”,第501行,在spawn中
返回super().spawn(cmd)
文件“C:\Python36\lib\distutils\ccompiler.py”,第909行,在spawn中
繁殖(cmd,dry\u run=self.dry\u run)
文件“C:\Python36\lib\distutils\spawn.py”,第38行,在spawn中
_繁殖(命令,搜索路径,干运行=干运行)
文件“C:\Python36\lib\distutils\spawn.py”,第81行,在
“命令%r失败,退出状态为%d”%(cmd,rc))
distutils.errors.DistutilsExecError:command[''C:\\程序文件(x86)\\Microso
ft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\cl.exe“,”/c',“/nologo',“/Ox',”/W
3'、'/GL'、'/DNDEBUG'、'/MD'、'-IC:\\Python36\\include'、'-IC:\\Python36\\include'
e','-IC:\\ProgramFiles(x86)\\Microsoft Visual Studio 14.0\\VC\\INCLUDE',''
-IC:\\ProgramFiles(x86)\\Microsoft Visual Studio 14.0\\VC\\ATLMFC\\INCLUDE“,
“-IC:\\ProgramFiles(x86)\\Windows工具包\\10\\include\\10.0.14393.0\\ucrt”,”
-IC:\\Program Files(x86)\\Windows工具包\\NETFXSDK\\4.6.1\\include\\um“,”-IC:\
\程序文件(x86)\\Windows工具包\\10\\include\\10.0.14393.0\\shared“,”-IC:\
\程序文件(x86)\\Windows工具包\\10\\include\\10.0.14393.0\\um“,”-IC:\\Pro
gram文件(x86)\\Windows工具包\\10\\include\\10.0.14393.0\\winrt“,”/EHsc“,”/T
pPyDrawbox.cpp','/Fobuild\\temp.win-amd64-3.6\\Release\\PyDrawbox.obj']失败
退出状态为2
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“setup.py”,第7行,在
ext_模块=[drawbox_模块])
文件“C:\Python36\lib\distutils\core.py”,第148行,在安装程序中
dist.run_命令()
文件“C:\Python36\lib\distutils\dist.py”,第955行,在run\u命令中
self.run_命令(cmd)
文件“C:\Python36\lib\distutils\dist.py”,第974行,在run\u命令中
cmd_obj.run()
文件“C:\Python36\lib\distutils\command\build.py”,第135行,正在运行
self.run_命令(cmd_名称)
文件“C:\Python36\lib\distutils\cmd.py”,第313行,在run\u命令中
self.distribution.run_命令(command)
文件“C:\Python36\lib\distutils\dist.py”,第974行,在run\u命令中
cmd_obj.run()
文件“C:\Python36\lib\distutils\command\build\u ext.py”,第339行,正在运行
self.build_扩展()
文件“C:\Python36\lib\distutils\command\build\u ext.py”,第448行,在build\u exte中
延期
self.\u build\u extensions\u serial()
文件“C:\Python36\lib\distutils\command\build\u ext.py”,第473行,在\u build\u ext中
ensions_系列
自构建扩展(ext)
文件“C:\Python36\lib\distutils\command\build\u ext.py”,第533行,在build\u exte中
延期
dependens=ext.dependens)
文件“C:\Python36\lib\distutils\\u msvccompiler.py”,第384行,在compile中
提高编译器错误(msg)
distutils.errors.CompileError:command[''C:\\Program Files(x86)\\Microsoft Vis
ual Studio 14.0\\VC\\BIN\\x86_amd64\\cl.exe“,”/c',“/nologo',“/Ox',“/W3',”/
GL'、'/DNDEBUG'、'/MD'、'-IC:\\Python36\\include'、'-IC:\\Python36\\include'、'-
-IC:\\ProgramFiles(x86)\\Microsoft Visual Studio 14.0\\VC\\INCLUDE“,”-IC:\\
程序文件(x86)\\Microsoft Visual Studio 14.0\\VC\\ATLMFC\\INCLUDE“,”-IC:
\\程序文件(x86)\\Windows工具包\\10\\include\\10.0.14393.0\\ucrt“,”-IC:\\
程序文件(x86)\\Windows工具包\\NETFXSDK\\4.6.1\\include\\um“,”-IC:\\Progr
am文件(x86)\\Windows工具包\\10\\include\\10.0.14393.0\\shared“,”-IC:\\Progr
am文件(x86)\\Windows工具包\\10\\include\\10.0.14393.0\\um“,”-IC:\\Program F
iles(x86)\\Windows工具包\\10\\include\\10.0.14393.0\\winrt“,”/EHsc“,”/TpPyDra
wbox.cpp','/Fobuil
import sys
from distutils.core import setup
from Cython.Build import cythonize
import numpy as np

extension = cythonize("unpack.pyx", build_dir="build")[0]
extension.extra_link_args.append("/OUT:unpack.pyd")   # VCPP specific!

setup(
    name = 'unpack',
    include_dirs = [np.get_include(), "..\Drawbox Library"],
    ext_modules = [extension],
    script_args = ["build_ext", "--inplace"],    
)