首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为Saxon/C构建Python扩展失败:“找不到vcvarsall.bat”

为Saxon/C构建Python扩展失败:“找不到vcvarsall.bat”
EN

Stack Overflow用户
提问于 2021-03-22 16:43:58
回答 1查看 403关注 0票数 0

摘要:安装失败,saxon在Python上

结果来自: saxon-setup.py build_ext -if (见下面的源代码清单)

代码语言:javascript
复制
running build_ext
building 'saxonc' extension
error: Unable to find vcvarsall.bat

我对编译器/编译( .pyx、.cpp、.c、.dll等)缺乏经验。以及如何从python转到编译代码。看起来Saxon是用Java编写的,跨到C源代码,然后在Windows上本地编译,然后添加钩子,这样你就可以从你的获得那个复杂的C代码了,我的头在旋转!)

环境: Python 10, 3.9.2

下面是试图安装的“面包屑”列表,并提供了一些链接:

代码语言:javascript
复制
saxon-c (Home Edition / open-source, easy to install)  
https://www.saxonica.com/download/c.xml  
libsaxon-HEC-win-setup-v1.2.1.exe  
path to setup.py: c:\Program Files\Saxonica\SaxonHEC1.2.1\Saxon.C.API\python-saxon   
Docs:  
https://www.saxonica.com/saxon-c/documentation/index.html#!starting/installingpython  
https://www.saxonica.com/saxon-c/doc/html/saxonc.html  
代码语言:javascript
复制
cython installed via conda (easy)  
https://anaconda.org/anaconda/cython  
https://cython.readthedocs.io/en/latest/  
cython                    0.29.22          py39hd77b12b_0  
代码语言:javascript
复制
setuptools installed via conda (easy)  
https://anaconda.org/anaconda/setuptools  
setuptools                52.0.0           py39haa95532_0  
代码语言:javascript
复制
https://wiki.python.org/moin/WindowsCompilers (required some navigation to avoid the IDE / large download)  
Microsoft Build Tools for Visual Studio 2019.   
C++ build tools  
latest versions of MSVCv142 - VS 2019 C++ x64/x86 build tools and   
Windows 10 SDK    
are checked.   
代码语言:javascript
复制
https://pythonwheels.com/ (brief look - no easy solution)  
https://packaging.python.org/ (brief look - many options, no easy solutions)  
https://www.lfd.uci.edu/~gohlke/pythonlibs/ (brief look - no Saxon)  
https://packaging.python.org/guides/installing-scientific-packages/#the-conda-cross-platform-package-manager  
(I wish Saxon was a "scientific" package with a simple conda install.)  

saxon-setup.py清单-结果出错:找不到vcvarsall.bat

代码语言:javascript
复制
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
from Cython.Build import cythonize
    
setup(ext_modules=cythonize(    #Long line reformatted here for readability. see original
[Extension("saxonc", 
["saxonc.pyx", 
"../SaxonProcessor.cpp", 
"../SaxonCGlue.c", 
"../SaxonCXPath.c", 
"../XdmValue.cpp", 
"../XdmItem.cpp", 
"../XdmNode.cpp", 
"../XdmAtomicValue.cpp", 
"../XsltProcessor.cpp",
"../Xslt30Processor.cpp", 
"../XQueryProcessor.cpp",
"../XPathProcessor.cpp",
"../SchemaValidator.cpp"], language="c++",
)]),include_dirs = ['../jni', "../jni/unix"],
cmdclass = {'build_ext': build_ext}
)

下一次尝试(评论后)在Anaconda Promp (miniconda3)中尝试将Anaconda与Powershell联系起来

代码语言:javascript
复制
conda update conda
activate xml   #my xml conda environment
conda init

我关闭并重新打开Anaconda提示(显示先前init的结果,如下所示)

代码语言:javascript
复制
(xml) C:\Users\rick>conda init
no change     C:\Users\rick\miniconda3\Scripts\conda.exe
no change     C:\Users\rick\miniconda3\Scripts\conda-env.exe
no change     C:\Users\rick\miniconda3\Scripts\conda-script.py
no change     C:\Users\rick\miniconda3\Scripts\conda-env-script.py
no change     C:\Users\rick\miniconda3\condabin\conda.bat
no change     C:\Users\rick\miniconda3\Library\bin\conda.bat
no change     C:\Users\rick\miniconda3\condabin\_conda_activate.bat
no change     C:\Users\rick\miniconda3\condabin\rename_tmp.bat
no change     C:\Users\rick\miniconda3\condabin\conda_auto_activate.bat
no change     C:\Users\rick\miniconda3\condabin\conda_hook.bat
no change     C:\Users\rick\miniconda3\Scripts\activate.bat
no change     C:\Users\rick\miniconda3\condabin\activate.bat
no change     C:\Users\rick\miniconda3\condabin\deactivate.bat
no change     C:\Users\rick\miniconda3\Scripts\activate
no change     C:\Users\rick\miniconda3\Scripts\deactivate
no change     C:\Users\rick\miniconda3\etc\profile.d\conda.sh
no change     C:\Users\rick\miniconda3\etc\fish\conf.d\conda.fish
no change     C:\Users\rick\miniconda3\shell\condabin\Conda.psm1
no change     C:\Users\rick\miniconda3\shell\condabin\conda-hook.ps1
no change     C:\Users\rick\miniconda3\Lib\site-packages\xontrib\conda.xsh
no change     C:\Users\rick\miniconda3\etc\profile.d\conda.csh
no change     C:\Users\rick\Documents\WindowsPowerShell\profile.ps1
no change     HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun
No action taken.

我以管理员身份运行Powershell。

代码语言:javascript
复制
PS C:\Program Files\Saxonica\SaxonHEC1.2.1\Saxon.C.API\python-saxon> py --version
py : The term 'py' is not recognized ...

PS C:\Program Files\Saxonica\SaxonHEC1.2.1\Saxon.C.API\python-saxon> python --version
Python 3.9.2
代码语言:javascript
复制
PS C:\Program Files\Saxonica\SaxonHEC1.2.1\Saxon.C.API\python-saxon> python saxon-setup.py build_ext -if
running build_ext
building 'saxonc' extension
error: Unable to find vcvarsall.bat

不确定这是否有什么帮助

代码语言:javascript
复制
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current>csc /version
3.9.0-6.21160.10 (59eedc33)

第三次尝试(在评论之后)得到了编译--见答案。

EN

回答 1

Stack Overflow用户

发布于 2021-03-25 11:52:43

完全安装C++编译器解决了“错误:找不到vcvarsall.bat”。

如果您只是安装MicrosoftBuildToolsforVisualStudio2019,并选中了: C++ Build、最新版本的MSVCv142 - VS 2019 C++ x64/x86构建工具和Windows10SDK,您将错过一些必需的组件。

解决方案是返回到Build安装程序,并安装整个"C++构建工具“组件集。如果您忽略了这一点,只需再次运行(它只是一个安装程序),然后修改您的安装,从主页中选择C++构建工具:

这将为您选择一组组件,安装将很大(很多gigs),但是它将为Python编译。

安装之后,标准Windows安装程序列表展开,包括:

微软Visual 2010 AddOn

  • Microfsoft Office

  • Microsoft

  • Web Deploy 4.0

  • Microsoft Visual Studio 2010 Tools for Office

  • Microsoft Visual C++ 2015-2019可再发行(x86)

  • Microsoft Visual C++ 2015-2019可再发行(x64)

要在anaconda环境中编译:

以管理员身份打开Anaconda Powershell提示符

代码语言:javascript
复制
PS cd C:\Program Files\Saxonica\SaxonHEC1.2.1\Saxon.C.API\python-saxon
PS C:\WINDOWS\system32> conda activate xml #xml here is my conda environment to sandbox the new software and try it out
PS C:\Program Files\Saxonica\SaxonHEC1.2.1\Saxon.C.API\python-saxon> get-executionpolicy
Bypass  
#sometimes Powershell has permission restrictions on scripts running just checking here
$Env:PYTHONPATH += ";C:\Program Files\Saxonica\SaxonHEC1.2.1\Saxon.C.API\python-saxon"  #PYTHONPATH env variable was blank ahead of this

python saxon-setup.py build_ext -if

需要一段时间才能讨好

readme.txt说要安装文档化,但是没有找到:

代码语言:javascript
复制
(xml) C:\Users\rick>pydoc -w saxonc
No Python documentation found for 'saxonc'.
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66750309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档