我尝试安装Python包dulwich:
pip install dulwich
但我收到了一条神秘的错误消息:
error: Unable to find vcvarsall.bat
如果我尝试手动安装软件包,也会发生同样的情况:
> python setup.py install
running build_ext
building 'dulwich._objects' extension
error: Unable to find vcvarsall.bat
我尝试安装Python包dulwich:
pip install dulwich
但我收到了一条神秘的错误消息:
error: Unable to find vcvarsall.bat
如果我尝试手动安装软件包,也会发生同样的情况:
> python setup.py install
running build_ext
building 'dulwich._objects' extension
error: Unable to find vcvarsall.bat
当前回答
关于这个问题的最佳和详尽的答案如下:https://blogs.msdn.microsoft.com/pythonengineering/2016/04/11/unable-to-find-vcvarsall-bat/
在大多数情况下,只要找到适合您所需的python依赖项的.whl包并使用pip安装它就足够了。
在最后一种情况下,您必须安装microsoft编译器并从源代码安装软件包。
其他回答
我花了将近2天的时间来研究如何在我的python 3.4 64位版本中解决这个问题:python 3.4.3(v3.4.3:9b73f1c3e601,2015年2月24日,22:44:40)[MSC v.1600 64位(AMD64)]
解决方案1,硬:(在阅读之前,先阅读下面的解决方案2)最后,这是帮助我的:
安装Visual C++2010学习版安装Microsoft Windows SDK v7.1 for Windows 7在C:\Program Files(x86)\Microsoft Visual Studio 10.0\VC\bin\amd64中手动创建vcvars64.bat文件,该文件包含CALL“C:\Program Files\Microsoft SDK \Windows\v7.1\bin\SetEnv.cmd”/x64或其他路径,具体取决于安装位置(这似乎是可选的)安装Microsoft Visual Studio 2010 Service Pack 1以及针对Windows SDK 7.1的Microsoft Visual C++2010 Service Pack 2编译器更新之后,我尝试pip安装numpy,但收到以下错误:get_mathlib_info中的文件“numpy\core\setup.py”,第686行raise RuntimeError(“断开的工具链:无法链接简单的C程序”)运行时错误:工具链断裂:无法链接简单的C程序我在C:\Python34\Lib\distutils\msvc9compiler.py中将mfinfo更改为Nonehttps://stackoverflow.com/a/23099820/4383472最后,在pipinstallnumpy命令之后,我的avast防病毒软件试图干扰安装过程,但我很快禁用了它
花了很长时间——numpy编译了几分钟,我甚至认为有错误,但最终一切都正常。
解决方案2,简单:(我知道这一方法已经在一个高投票率的答案中被提及,但让我重复一遍,因为它确实更容易)在经历了所有这些工作之后,我明白了对我来说最好的方法就是使用来自http://www.lfd.uci.edu/~gohlke/pythonlibs/未来。有一个很小的机会,我将永远需要一些包(或包的版本),而这个网站不包含。这样安装过程也快得多。例如,要安装numpy:
donwload numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl(如果您有Python 3.4 64位)在命令提示符或powershell中,使用pip pip install numpy‑1.9.2+mkl‑cp34‑none‑win_amd64.whl(或文件的完整路径,具体取决于命令提示符的打开方式)进行安装
我也遇到了同样的问题,现在已经解决了。
“谷歌”告诉我,我需要安装“Microsoft Visual C++编译器Python 2.7版”。我不仅安装了该工具,还安装了Visual C++2008 Reditributable,但无济于事。然后我尝试安装Visual C++2008速成版。问题已经解决了!
只需尝试安装Visual C++2008速成版!
调用importsetuptools将对补丁distutils进行模仿,以强制与Visual Studio兼容。手动调用vcvars32.bat将设置虚拟环境并防止编译器抛出其他常见错误。对于VS 2017,文件位于
“C:\Program Files(x86)\Microsoft VisualStudio\2017\社区\VC\Auxiliary\Build\vcvars32.bat“
以下是我用来将.pyx文件快速编译为.pyd的安装脚本:(注意:它使用第三方模块发送2个
# cython_setup.py
import sys, os, time, platform, subprocess
from setuptools import setup, find_packages
from Cython.Build import cythonize
from traceback import format_exc
# USAGE:
#
# from cython_setup import run
# run(pyx_path)
# vcvars = r"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat"
# NOTE: to use visual studio 2017 you must have setuptools version 34+
vcvars = r"C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars32.bat"
def _build_ext():
try:
pyx_path = sys.argv.pop(-1)
pyx_path = os.path.abspath(pyx_path)
if not os.path.exists(pyx_path):
raise FileNotFoundError(f"{pyx_path} does not exist")
project_name = sys.argv.pop(-1)
os.chdir(os.path.abspath(os.path.dirname(pyx_path)))
print("cwd: %s" % os.getcwd())
print(os.path.abspath("build"))
setup(
name=project_name,
# cmdclass = {'build_ext': build_ext},
packages=find_packages(),
# ext_modules=cythonize(extensions)
ext_modules=cythonize(pyx_path,
compiler_directives={'language_level': 3, 'infer_types': True, 'binding': False},
annotate=True),
# include_dirs = [numpy.get_include()]
build_dir=os.path.abspath("build")
)
except:
input(format_exc())
def retry(func):
def wrapper(*args, **kw):
tries = 0
while True:
try:
return func(*args, **kw)
except Exception:
tries += 1
if tries > 4:
raise
time.sleep(0.4)
return wrapper
@retry
def cleanup(pyx_path):
from send2trash import send2trash
c_file = os.path.splitext(pyx_path)[0] + ".c"
if os.path.exists(c_file):
os.remove(c_file)
if os.path.exists("build"):
send2trash("build")
def move_pyd_files(pyx_path):
pyx_dir = os.path.dirname(pyx_path)
build_dir = os.path.join(pyx_dir, "build")
if not os.path.exists(build_dir):
raise RuntimeError(f"build_dir {build_dir} did not exist....")
found_pyd = False
for top, dirs, nondirs in os.walk(build_dir):
for name in nondirs:
if name.lower().endswith(".pyd") or name.lower().endswith(".so"):
found_pyd = True
old_path = os.path.join(top, name)
new_path = os.path.join(pyx_dir, name)
if os.path.exists(new_path):
print(f"removing {new_path}")
os.remove(new_path)
print(f"file created at {new_path}")
os.rename(old_path, new_path)
if not found_pyd:
raise RuntimeError("Never found .pyd file to move")
def run(pyx_path):
"""
:param pyx_path:
:type pyx_path:
:return: this function creates the batch file, which in turn calls this module, which calls cythonize, once done
the batch script deletes itself... I'm sure theres a less convoluted way of doing this, but it works
:rtype:
"""
try:
project_name = os.path.splitext(os.path.basename(pyx_path))[0]
run_script(project_name, os.path.abspath(pyx_path))
except:
input(format_exc())
def run_script(project_name, pyx_path):
dirname = os.path.dirname(pyx_path)
# ------------------------------
os.chdir(dirname)
if os.path.exists(vcvars):
# raise RuntimeError(
# f"Could not find vcvars32.bat at {vcvars}\nis Visual Studio Installed?\nIs setuptools version > 34?")
subprocess.check_call(f'call "{vcvars}"', shell=True)
cmd = "python" if platform.system() == "Windows" else "python3"
subprocess.check_call(f'{cmd} "{__file__}" build_ext "{project_name}" "{pyx_path}"', shell=True)
move_pyd_files(pyx_path)
cleanup(pyx_path)
if len(sys.argv) > 2:
_build_ext()
当我尝试在windows 10中安装panda时,也出现了同样的错误。在搜索了几个解决方案后,我最终使用了轮子。
首先,将pip升级到最新版本:
easy_install install -U pip
第二,安装车轮:
pip install wheel
第三,下载软件包的whl文件并安装:
pip install [xxx].whl
到目前为止,我认为wheel是在windows上安装Python包的最佳方式。
转到此处:http://docs.continuum.io/anaconda/install.html#windows-安装
有安装anaconda的说明,它将提供一个GUI和一个静默安装的大多数软件包,这些软件包似乎导致了这个问题http://www.scipy.org/.我知道2.7的解决方案https://www.microsoft.com/en-us/download/details.aspx?id=44266但我没有看到Python 3.4的选项。下载并安装Anaconda后,您应该能够从scipy导入所需的大部分软件包。
希望这能帮助一些人。我花了45分钟的时间来搜索帖子和网站。
编辑:我只想注意GUI页面上OS符号旁边有一个Python34链接。