|
|
1
CristiFati
6 年前
地面注释
:
演练
:
-
创建目录并
cd光盘
到它(应该是空的)。这将是
%ROOT\u目录%
,并且我要使用的所有路径都是相对于它的(当然绝对路径除外),这将是默认的dir(未指定时)
-
下载
模拟字符串
来源(
[GitHub]: Georgetown-IR-Lab/simstring - simstring-master.zip
)
-
解压归档文件-它将在目录中完成
模拟字符串母版
(将自动创建)
-
创建目录
它本身
. 在其中,下载:
-
[SourceForge]: gnuwin32/GnuWin - libiconv-1.9.2-1-lib.zip
-
[SourceForge]: gnuwin32/GnuWin - libiconv-1.9.2-1-bin.zip
-
从这些文件中提取所需内容:
-
从…起
#1.
:
-
包括
目录-用于
编写
阶段
-
lib公司
目录-用于
链接
阶段
-
这两个阶段都由
设置。py公司
(下文)
-
从…起
#2.
:
-
箱子
dir-在运行时使用(在使用(导入)模块时)
-
cd光盘
到
模拟字符串母版
目录。为了构建扩展,我使用
设置。py公司
的
build\u扩展
命令(由递归调用
安装
-如您的输出所示):
[Python 3]: distutils.command.build_ext - Build any extensions in a package
-
跑步
build\u扩展
,将产生错误:
export.cpp(7): fatal error C1083: Cannot open include file: 'iconv.h': No such file or directory
那是因为
蟒蛇
构建系统不知道我们做了什么(在
它本身
目录)。要让它知道,请通过:
-
-我
(
--包括目录
)-将转换为
[MS.Docs]: /I (Additional include directories)
-
-L
(
--库目录
)-将转换为
[MS.Docs]: /LIBPATH (Additional Libpath)
-
-l
(
--图书馆
)-将转换为
[MS.Docs]: LINK Input Files
标志(
python setup.py build_ext --help
将显示所有)。现在,不要通过
#2.
和
#3.
因为我们无法到达
链接
阶段(如需要):
(py36x86_test) E:\Work\Dev\StackOverflow\q048528041\simstring-master>"e:\Work\Dev\VEnvs\py36x86_test\Scripts\python.exe" setup.py build_ext -I"../libiconv/include"
running build_ext
building '_simstring' extension
C:\Install\x86\Microsoft\Visual Studio Community\2015\VC\BIN\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -I. -I../libiconv/include -Ic:\Install\x86\Python\Python\3.6\include -Ic:\Install\x86\Python\Python\3.6\include "-IC:\Install\x86\Microsoft\Visual Studio Community\2015\VC\INCLUDE" "-IC:\Install\x86\Microsoft\Visual Studio Community\2015\VC\ATLMFC\INCLUDE" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\winrt" /EHsc /Tpexport.cpp /Fobuild\temp.win32-3.6\Release\export.obj
export.cpp
export.cpp(112): warning C4297: 'writer::~writer': function assumed not to throw an exception but does
export.cpp(112): note: destructor or deallocator has a (possibly implicit) non-throwing exception specification
export.cpp(126): warning C4297: 'writer::~writer': function assumed not to throw an exception but does
export.cpp(126): note: destructor or deallocator has a (possibly implicit) non-throwing exception specification
export.cpp(37): error C2664: 'size_t libiconv(libiconv_t,const char **,size_t *,char **,size_t *)': cannot convert argument 2 from 'char **' to 'const char **'
export.cpp(37): note: Conversion loses qualifiers
export.cpp(140): note: see reference to function template instantiation 'bool iconv_convert<std::basic_string<char,std::char_traits<char>,std::allocator<char>>,std::wstring>(libiconv_t,const source_type &,destination_type &)' being compiled
with
[
source_type=std::basic_string<char,std::char_traits<char>,std::allocator<char>>,
destination_type=std::wstring
]
error: command 'C:\\Install\\x86\\Microsoft\\Visual Studio Community\\2015\\VC\\BIN\\cl.exe' failed with exit status 2
-
要做的事情(发现错误后,只需逐一修复
出口cpp公司
所需更改):
-
#define ICONV_CONST const
(
cl.exe
不会自动强制转换
常量
ness)
-
#define __SIZEOF_WCHAR_T__ 2
(作为
sizeof(wchar_t)
是
2.
)
-
去掉未编译的代码(我在开始时谈到过):
STL公司
带的容器
4字节
烧焦
不在上编译
赢
,希望修复代码,以及何时修复
赢
将支持
烧焦
s、 代码将编译
OOTB
,但我做不到,所以我不得不做任何事情
OSX公司
. 因此,
#ifdef __APPLE__
应替换为
#if defined(__APPLE__) || defined(WIN32)
(5次)
请注意#1。和#2。可以(应该)通过cmdline(
-D
标志,但我无法为已定义的标志指定值),或
设置。py公司
(因此,即使需要在许多文件中声明,它们也只定义一次),但我没有花太多时间,所以我直接在源代码中替换它们。
手动应用更改或保存:
--- export.cpp.orig 2016-11-30 18:53:32.000000000 +0200
+++ export.cpp 2018-02-14 13:36:31.317953200 +0200
@@ -19,9 +19,18 @@
#endif/*USE_LIBICONV_GNU*/
#ifndef ICONV_CONST
+#if defined (WIN32)
+#define ICONV_CONST const
+#else
#define ICONV_CONST
+#endif
#endif/*ICONV_CONST*/
+#if defined (WIN32)
+#define __SIZEOF_WCHAR_T__ 2
+#endif
+
+
template <class source_type, class destination_type>
bool iconv_convert(iconv_t cd, const source_type& src, destination_type& dst)
{
@@ -269,7 +278,7 @@
iconv_close(bwd);
}
-#ifdef __APPLE__
+#if defined(__APPLE__) || defined(WIN32)
#include <cassert>
#endif
@@ -283,7 +292,7 @@
retrieve_thru(dbr, query, this->measure, this->threshold, std::back_inserter(ret));
break;
case 2:
-#ifdef __APPLE__
+#if defined(__APPLE__) || defined(WIN32)
#if __SIZEOF_WCHAR_T__ == 2
retrieve_iconv<wchar_t>(dbr, query, UTF16, this->measure, this->threshold, std::back_inserter(ret));
#else
@@ -294,7 +303,7 @@
#endif
break;
case 4:
-#ifdef __APPLE__
+#if defined(__APPLE__) || defined(WIN32)
#if __SIZEOF_WCHAR_T__ == 4
retrieve_iconv<wchar_t>(dbr, query, UTF32, this->measure, this->threshold, std::back_inserter(ret));
#else
@@ -317,7 +326,7 @@
std::string qstr = query;
return dbr.check(qstr, translate_measure(this->measure), this->threshold);
} else if (dbr.char_size() == 2) {
-#ifdef __APPLE__
+#if defined(__APPLE__) || defined(WIN32)
#if __SIZEOF_WCHAR_T__ == 2
std::basic_string<wchar_t> qstr;
#else
@@ -333,7 +342,7 @@
iconv_close(fwd);
return dbr.check(qstr, translate_measure(this->measure), this->threshold);
} else if (dbr.char_size() == 4) {
-#ifdef __APPLE__
+#if defined(__APPLE__) || defined(WIN32)
#if __SIZEOF_WCHAR_T__ == 4
std::basic_string<wchar_t> qstr;
#else
像
simstring\u获胜。差异
. 那是一个
差异
. 看见
[SO]: Run/Debug a Django application's UnitTests from the mouse right click context menu in PyCharm Community Edition? (@CristiFati's answer)
(
修补程序
utrunner公司
第节),了解如何在上应用修补程序
赢
(基本上,每行以
一个“+”
标志进入,每一行以
一个“-”
标志熄灭)。我正在使用
Cygwin公司
,
顺便说一句
.
我还将此修补程序提交给
[GitHub]: Georgetown-IR-Lab/simstring - Support for Win
和
今天合并了
(
180222
).
(py36x86_test) E:\Work\Dev\StackOverflow\q048528041\simstring-master>"c:\Install\x64\Cygwin\Cygwin\AllVers\bin\patch.exe" -i "../simstring_win.diff"
patching file export.cpp
(py36x86_test) E:\Work\Dev\StackOverflow\q048528041\simstring-master>rem Looking at export.cpp content, you'll notice the changes
(py36x86_test) E:\Work\Dev\StackOverflow\q048528041\simstring-master>"e:\Work\Dev\VEnvs\py36x86_test\Scripts\python.exe" setup.py build_ext -I"../libiconv/include" -L"../libiconv/lib" -llibiconv
running build_ext
building '_simstring' extension
C:\Install\x86\Microsoft\Visual Studio Community\2015\VC\BIN\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -I. -I../libiconv/include -Ic:\Install\x86\Python\Python\3.6\include -Ic:\Install\x86\Python\Python\3.6\include "-IC:\Install\x86\Microsoft\Visual Studio Community\2015\VC\INCLUDE" "-IC:\Install\x86\Microsoft\Visual Studio Community\2015\VC\ATLMFC\INCLUDE" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\winrt" /EHsc /Tpexport.cpp /Fobuild\temp.win32-3.6\Release\export.obj
export.cpp
export.cpp(121): warning C4297: 'writer::~writer': function assumed not to throw an exception but does
export.cpp(121): note: destructor or deallocator has a (possibly implicit) non-throwing exception specification
export.cpp(135): warning C4297: 'writer::~writer': function assumed not to throw an exception but does
export.cpp(135): note: destructor or deallocator has a (possibly implicit) non-throwing exception specification
C:\Install\x86\Microsoft\Visual Studio Community\2015\VC\BIN\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -I. -I../libiconv/include -Ic:\Install\x86\Python\Python\3.6\include -Ic:\Install\x86\Python\Python\3.6\include "-IC:\Install\x86\Microsoft\Visual Studio Community\2015\VC\INCLUDE" "-IC:\Install\x86\Microsoft\Visual Studio Community\2015\VC\ATLMFC\INCLUDE" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\winrt" /EHsc /Tpexport_wrap.cpp /Fobuild\temp.win32-3.6\Release\export_wrap.obj
export_wrap.cpp
C:\Install\x86\Microsoft\Visual Studio Community\2015\VC\BIN\link.exe /nologo /INCREMENTAL:NO /LTCG /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO /LIBPATH:c:\Install\x86\Python\Python\3.6\Libs /LIBPATH:../libiconv/lib /LIBPATH:e:\Work\Dev\VEnvs\py36x86_test\libs /LIBPATH:e:\Work\Dev\VEnvs\py36x86_test\PCbuild\win32 "/LIBPATH:C:\Install\x86\Microsoft\Visual Studio Community\2015\VC\LIB" "/LIBPATH:C:\Install\x86\Microsoft\Visual Studio Community\2015\VC\ATLMFC\LIB" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.16299.0\ucrt\x86" "/LIBPATH:C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\lib\um\x86" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.16299.0\um\x86" libiconv.lib /EXPORT:PyInit__simstring build\temp.win32-3.6\Release\export.obj build\temp.win32-3.6\Release\export_wrap.obj /OUT:build\lib.win32-3.6\_simstring.cp36-win32.pyd /IMPLIB:build\temp.win32-3.6\Release\_simstring.cp36-win32.lib
Creating library build\temp.win32-3.6\Release\_simstring.cp36-win32.lib and object build\temp.win32-3.6\Release\_simstring.cp36-win32.exp
Generating code
Finished generating code
(py36x86_test) E:\Work\Dev\StackOverflow\q048528041\simstring-master>dir /b "build\lib.win32-3.6"
_simstring.cp36-win32.pyd
-
最后,它建成了。这个
.pyd公司
只是一个
.动态链接库
. 这就是
依赖项行者
:
-
让我们看看是否可以使用它:
(py36x86_test) E:\Work\Dev\StackOverflow\q048528041\simstring-master>"e:\Work\Dev\VEnvs\py36x86_test\Scripts\python.exe" sample.py
Traceback (most recent call last):
File "E:\Work\Dev\StackOverflow\q048528041\simstring-master\simstring.py", line 18, in swig_import_helper
fp, pathname, description = imp.find_module('_simstring', [dirname(__file__)])
File "e:\Work\Dev\VEnvs\py36x86_test\lib\imp.py", line 296, in find_module
raise ImportError(_ERR_MSG.format(name), name=name)
ImportError: No module named '_simstring'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "sample.py", line 3, in <module>
import simstring
File "E:\Work\Dev\StackOverflow\q048528041\simstring-master\simstring.py", line 28, in <module>
_simstring = swig_import_helper()
File "E:\Work\Dev\StackOverflow\q048528041\simstring-master\simstring.py", line 20, in swig_import_helper
import _simstring
ModuleNotFoundError: No module named '_simstring'
这是因为导入时
模拟字符串
,从而导入
_模拟字符串
(the
.pyd公司
),
蟒蛇
没有找到它。要解决此问题,请执行以下操作:
(py36x86_test) E:\Work\Dev\StackOverflow\q048528041\simstring-master>set PYTHONPATH=%PYTHONPATH%;build\lib.win32-3.6
(py36x86_test) E:\Work\Dev\StackOverflow\q048528041\simstring-master>set PATH=%PATH%;..\libiconv\bin
(py36x86_test) E:\Work\Dev\StackOverflow\q048528041\simstring-master>"e:\Work\Dev\VEnvs\py36x86_test\Scripts\python.exe" sample.py
('Barack Hussein Obama II',)
('James Gordon Brown',)
()
('Barack Hussein Obama II',)
最终注释
:
-
模块有一些输出,与上的相同
Lnx公司
(
乌布图
)(我在哪里也建造了它-在那里我没有遇到任何问题),我不确定它是否
语义上
是否正确
-
我没有跑
设置。py公司
的
安装
命令(我不打算),我能想到的一件事可能会出错(虽然我不确定它会出错),就是不复制/包括
libiconv2.dll
进入包装。如果是这样,您可能需要修改
设置。py公司
(更改应较小)
|