Python GCC未编译Cython扩展

Python GCC未编译Cython扩展,python,gcc,cython,Python,Gcc,Cython,我正在尝试将一些.py文件编译成.pyd,使用我编写的名为compileToPyd的自定义模块(它只处理与编译相关的各种命令) 在尝试编译简单文件时,我会遇到许多错误: path\lib>C:\Python27\python.exe "main_setup.py" build running build running build_ext cythoning main.pyx to main.c Error compiling Cython file: -----------------

我正在尝试将一些
.py
文件编译成
.pyd
,使用我编写的名为
compileToPyd
的自定义模块(它只处理与编译相关的各种命令)

在尝试编译简单文件时,我会遇到许多错误:

path\lib>C:\Python27\python.exe "main_setup.py" build
running build
running build_ext
cythoning main.pyx to main.c

Error compiling Cython file:
------------------------------------------------------------
...
?# main.pyd
^
------------------------------------------------------------

main.pyx:1:0: Unrecognized character
building 'main' extension
c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\cl.exe /c /nologo /Ox
/MD /W3 /GS- /DNDEBUG -IC:\Python27\include -IC:\Python27\PC /Tcmain.c /Fobuild\
temp.win32-2.7\Release\main.obj
main.c
main.c(1) : fatal error C1189: #error :  Do not use this file, it is the result
of a failed Cython compilation.
error: command '"c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\cl.ex
e"' failed with exit status 2

python\lib>"gcc" "main.c" -o "main.pyd" -shared -I"C:\Python27\include" -L"C:\Python27\libs" -lpython
27
main.c:1:2: error: #error Do not use this file, it is the result of a failed Cyt
hon compilation.
 #error Do not use this file, it is the result of a failed Cython compilation.
文件本身非常简单:

# main.pyd
# author name
# January 2014

class AuthenticationError(Exception):
    pass

def main():
    '''Main process'''
    import authenticate
    if authenticate.authenticate():
        import some_module
        some_module.main()
    else:
        raise AuthenticationError("Not Authenticated")
它不是可执行文件,而是要导入的。编译适用于其他文件,那么为什么这个文件不行呢?谢谢

这是:

?# main.pyd
连同您的文件:

# main.pyd
指示文件开头有不可打印的字符,编辑器不可见。这通常是由于编辑器在文件的最开始处插入字节顺序标记,以指示保存文件时使用的编码

这个BOM表在编辑器中是不可见的,但当然会在那里,对于任何没有正确解码的软件来说,都会显得奇怪和不合适

输入cython,它就是这样做的

所以要解决这个问题,您需要删除该BOM表

在Visual Studio中,您可以通过打开文件并使用文件菜单项“高级保存选项”轻松完成此操作:

然后,在对话框中,您要确保选择的编码不包含“with signature”字样:

这里显示的编码“Unicode(带签名的UTF-8)-Codepage 65001”对于您的使用来说当然是错误的。我会尝试第一个项目,“西欧(Windows)-代码页1252”


请注意,编码更改在某些情况下可能会更改您的文件。如果您选择了错误的编码,版权符号和重音符号等内容可能会也将失去其表示形式。因此,对于这些字符,最好将它们作为转义字符嵌入到源代码中。

我在这里猜测,但编译器在文件中第一个可见字符之前抱怨某个字符,这一事实向我表明,该文件是使用包含字节顺序标记(BOM)的编码存储的。你能确认那个文件的编码吗?由于您使用的是Visual Studio,请使用“文件”菜单上的“高级文件保存”选项检查文件的编码。然后尝试选择一个不包含BOM的编码。我有记事本++设置不使用BOM。。。但很显然,它还是做到了。你应该把它贴出来作为答案;它解决了我的问题:)。顺便说一下,谢谢!好的,把它贴出来作为一个答案,并附上更多的信息。