Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我应该将C库与Python应用程序捆绑在一起吗?_Python_C_Distutils - Fatal编程技术网

我应该将C库与Python应用程序捆绑在一起吗?

我应该将C库与Python应用程序捆绑在一起吗?,python,c,distutils,Python,C,Distutils,如果我有一个Python包,它依赖于一些C库(比如用于数值计算的Gnu科学库(GSL)),那么将该库与我的代码捆绑在一起是一个好主意吗 我想让我的软件包尽可能容易地为用户安装,我不希望他们不得不手动下载C库并提供包含路径。此外,我还可以始终确保我提供的库的版本与我的代码兼容 但是,如果用户已经安装了库,是否可能会发生冲突,或者是否有其他原因导致我不应该这样做 我知道我可以通过提供一个二进制发行版来简化用户的操作,但我希望避免为所有可能的操作系统维护二进制发行版。因此,我希望坚持使用源代码发行版,

如果我有一个Python包,它依赖于一些C库(比如用于数值计算的Gnu科学库(GSL)),那么将该库与我的代码捆绑在一起是一个好主意吗

我想让我的软件包尽可能容易地为用户安装,我不希望他们不得不手动下载C库并提供包含路径。此外,我还可以始终确保我提供的库的版本与我的代码兼容

但是,如果用户已经安装了库,是否可能会发生冲突,或者是否有其他原因导致我不应该这样做


我知道我可以通过提供一个二进制发行版来简化用户的操作,但我希望避免为所有可能的操作系统维护二进制发行版。因此,我希望坚持使用源代码发行版,但是对于用户(自豪地拥有一个C编译器)来说,安装应该像
python setup.py install
一样简单

src可以有两个独立的分支,一个包含库,另一个不包含库。这样,在用户安装了库的情况下,您可以显式警告用户。另一个解决方案是(如果图书馆的许可证允许的话)将它们打包成一个文件

我认为没有唯一的解决方案,但这是我目前可以想到的想法


祝您好运

您可以使用它为应用程序创建私有Python环境。这避免了与其他库的冲突。最好是使用打包模块和依赖项,如库。发行版是任何软件项目的难点之一。Java和.NET定义了一个标准的运行时,然后只说“只分发其他所有内容”,从而减轻了部分负担。当然,这也有一个缺点:所有内容都必须用运行时支持的语言重写—只要您想使用本机代码,您就失去了所有优势

Python在Ruby、C、C++和其他语言中比较困难,因为它们通常利用现有的本地库。

一般来说:

  • 例如,可以通过pypi.python.org获取源sdist。正确设置您的安装需求(可能需要GSL的python绑定,而不是GSL本身)。使用标准设置工具/分布布局。这将让任何人——比方说任何发行版的软件包维护者——拿起您的软件并进行打包

  • 另外,考虑为你的观众提供一个完整的可安装的软件包。你不必支持所有的发行版和操作系统;挑选一个或两个你认为最有用的。像这样的工具可以让您为许多操作系统创建一个可安装、可运行的软件包,但对于linux,您可能希望用户安装发行版自己的transitive deps(libgsl?)-您需要一个完整的deb或rpm软件包来满足这一要求-同样,不要尝试支持任何和所有发行版,你会发疯的。支持您最常用的东西,并让其他用户帮助您满足其他打包需求

    也来看看