python有的包安装的时候需要安装Visual Studio

比如pyaudio这个包,里面用了C语言的代码,需要编译,官方还不提供编译好的linux版二进制whl。在linux里装需要root权限,有时候没有,很折磨。在windows里需要安装Visual Studio或者Microsoft Visual C++ 14.0,一下得吃掉4个G的硬盘,还装的贼麻烦。
我想了解一下,别的语言装第三方包的时候用C代码的情况多吗?他们的包用了C之后也需要装vs这种超大编译器吗

装个linux虚拟机喽。linux的二进制就在linux编译,别用windows编译

有些会提供选择:msvc 还是 mingw(比如 rust)。

然后你这个情况可能不需要完整的 msvc,试试 Microsoft C++ 生成工具(可能还需要 Windows SDK)?

那也得好几个G 老大了(跟gcc比)

可以看看有没有纯 Python 实现的同类包,不过对于这种影音处理可能不太适合。或者直接上 pyopencv 或者 ffmpeg 之类的有提供类似功能的更加全功能的包。

另外,巨硬有提供一个不包含 IDE 的简版 msvc

纯 c 的 python 包还可以考虑使用 mingw,我这里有个 qt 项目打包好的 mingw 可供下载:

http://mirrors.ustc.edu.cn/qtproject/online/qtsdkrepository/windows_x86/desktop/tools_mingw/qt.tools.win64_mingw810/

2 Likes

很多腳本語言追求速度就需要,不過一般官方提供編譯好的包。

主要是因为 Python 经常和 c/c++ 结合起来使用,所以安装 Python 第三方包的时候,偶尔会有个编译的步骤。如果我使用龙芯的话,安装时还会更频繁地使用 gcc 重新编译。

而其它常用的编程语言,比如 golang, java, c# 它们一般倾向于重头使用那门语言重新编写。在安装这些模块的时候当然方便了,但坏处是它们碰到使用 c/c++ 的地方会变得更为麻烦,经常出现各种缺失。比如 java 的加密组件,特性比 openssl 少多了,还有 ffmpeg,opencv, opengl,java, c# 之所以没有赶上最近的 AI 热潮,最重要的原因就是他们复用 cuda, tenserflow 这些 c++ 的生态特别麻烦。

幸好大多数 python 包都提供了 wheel 包使用。只能说聊胜于无吧。

所以选择一个语言,即要看到他的优势,也要看到它的缺点。我是很反对无脑捧一个技术的。

linux里面编译安装可以安装到自己的HOME目录,或者使用conda来安装。
库可以通过LD_LIBRARY_PATH来指定
二进制程序可以通过PATH来指定
python包可以通过P Y T H O N P A T H变量来指定位置。

只要你有运行权限装哪里是无所谓的。

综合下来,如果想省事就用conda来装好了

我又想到一个问题,之前我觉得python因为是解释型语言,所以经常需要借用C实现高性能,但是我今天突然想到nodejs是不是也有这个需求?同为脚本语言,同样有性能需求,nodejs有用到C的包吗?

不止是js、Python,大量的其他语言都包含与c/c++的互操作,因为有大量的基础工程组件是由c/c++编写的,不止是出于性能的考量,包括现在编程语言的原神——Rust。

用wsl安装