2017-09-25 120 views
0

我试图用64位Python版本机器上的64位Windows打造“nwalign” Python包。 (包可以在这里找到:https://pypi.python.org/pypi/nwalign/?)大厦C扩展Python包在Windows

我试图建立和安装使用'python setup.py install'包在Python 2.7和3.6,但我得到以下连接错误(我已经取代了一些信息通过 '...'):

(C:\...Anaconda3\envs\Python2) C:\...Desktop\nwalign-0.3.1>python setup.py 
... 
building 'nwalign/cnwalign' extension 
creating build\temp.win-amd64-2.7 
creating build\temp.win-amd64-2.7\Release 
creating build\temp.win-amd64-2.7\Release\nwalign 
C:\...AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\Bin\amd64\cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -IC:\...Anaconda3\envs\Python2\lib\site-packages\numpy\core\include -Inwalign -IC:\...Anaconda3\envs\Python2\include -IC:\...Anaconda3\envs\Python2\PC /Tcnwalign/cnwalign.c /Fobuild\temp.win-amd64-2.7\Release\nwalign/cnwalign.obj 
cnwalign.c 
c:\...anaconda3\envs\python2\lib\site-packages\numpy\core\include\numpy\npy_1_7_deprecated_api.h(12) : Warning Msg: Using deprecated NumPy API, disable it by #defining NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION 
... 
nwalign/cnwalign.c(7433) : warning C4267: 'initializing' : conversion from 'size_t' to 'int', possible loss of data 
C:\...AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\Bin\amd64\link.exe /DLL /nologo /INCREMENTAL:NO /LIBPATH:C:\...Anaconda3\envs\Python2\libs /LIBPATH:C:\...Anaconda3\envs\Python2\PCbuild\amd64 /LIBPATH:C:\...Anaconda3\envs\Python2\PC\VS9.0\amd64 /EXPORT:initnwalign/cnwalign build\temp.win-amd64-2.7\Release\nwalign/cnwalign.obj /OUT:build\lib.win-amd64-2.7\nwalign\cnwalign.pyd /IMPLIB:build\temp.win-amd64-2.7\Release\nwalign\cnwalign.lib /MANIFESTFILE:build\temp.win-amd64-2.7\Release\nwalign\cnwalign.pyd.manifest 
LINK : error LNK2001: unresolved external symbol initnwalign/cnwalign 
build\temp.win-amd64-2.7\Release\nwalign\cnwalign.lib : fatal error LNK1120: 1 unresolved externals 
error: command 'C:\\...AppData\\Local\\Programs\\Common\\Microsoft\\Visual C++ for Python\\9.0\\VC\\Bin\\amd64\\link.exe' failed with exit status 1120 

的setup.py文件:

from setuptools import setup, find_packages 
from distutils.extension import Extension 
#from Cython.Distutils import build_ext 

version = '0.3.1' 
import numpy 
np_include = numpy.get_include() 
try: 
    import nwalign 
    doc = nwalign.__doc__ 
except: 
    doc = "" 

setup(name='nwalign', 
     version=version, 
     description="Needleman-Wunsch global sequence alignment", 
     long_description=doc, 
     ext_modules=[ Extension("nwalign/cnwalign", 
         sources=["nwalign/cnwalign.c"], 
         include_dirs=[np_include, "nwalign"])], 
     keywords='sequence bioinformatics alignment needleman-wunsch', 
     url='http://bitbucket.org/brentp/biostuff/', 
     #download_url='http://bitbucket.org/brentp/biostuff/get/tip.tar.gz', 
     author='brentp', 
     author_email='[email protected]', 
     license='BSD', 
     test_suite='nose.collector', 
     include_package_data=True, 
     zip_safe=False, 
     packages=['nwalign'], 
     #package_dir={'': 'nwalign'}, 
     package_data = {'nwalign': ['*.pyx', "*.c"]}, 
     install_requires=[ 
      'numpy', 'cython' 
     ], 
     entry_points= { 
      # -*- Entry points: -*- 
      'console_scripts': ['nwalign = nwalign:main'] 
      }, 
    classifiers = [ 
     'Development Status :: 3 - Alpha', 
     'Intended Audience :: Developers', 
     'Intended Audience :: Science/Research', 
     'License :: OSI Approved :: BSD License', 
     'Operating System :: OS Independent', 
     'Programming Language :: Python', 
     'Topic :: Scientific/Engineering :: Bio-Informatics', 
     'Topic :: Scientific/Engineering', 
     'Topic :: Text Processing' 
     ], 
) 

我试着使用适当的BAT文件指导我MSCV编译器为64位,但不能缓解问题。 (我在终端运行 'vcvarsall AMD64' 为 'C:\应用程序数据\本地\程序\ COMMON \微软\的Visual C++在Python \ 9.0')

同样的问题和解决方案相关的(更改.def文件和删除导出)由另一个nwalign用户在这里提出https://bitbucket.org/brentp/biostuff/issues/1/instalation-issue不适合我,因为我的构建不会创建.def文件,只有cnwalign.obj。

任何想法?

回答

0

的问题是因为[MSDN]: /EXPORT (Exports a Function)接头指令被错误地使用(/EXPORT:initnwalign/cnwaligninitnwalign/cnwalign是不是有效的函数标识符)。
(可以很容易地看到),由扩展名称触发:nwalign/cnwalign

报价从Python2.7.13extension.py文件(%PYTHON2.7.13_INSTALL_DIR%\ LIB \的distutils \ extension.py:31(的class Extension一部分)):

实例属性:
     名称:字符串
         扩展名的全称,包括任何包 - 即。
          *不*文件名或路径名,但的Python带点名称

所以,在setup.py,修改方式Extension被实例化,从:

ext_modules=[ Extension("nwalign/cnwalign", 

发送至:

ext_modules=[ Extension("nwalign.cnwalign", 

应该避免错误,并建立.pyd

+0

非常感谢您的回答,但是,基于文件夹结构和文件命名,我设法建立nwalign改变setup.py实例化简单地: 'ext_modules = [扩展(“cnwalign”,' 再次感谢! – Floris