问题标签 [distutils]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
315 浏览

python - Python distutils 在不同机器上构建扩展的方式不同

我一直在研究一个包含大量文件的 Python 扩展模块。在一台机器上构建时,python setup.py build会很高兴地检测到更改的文件,只构建那些文件,并将整个东西链接在一起,就像 make 一样。然而,在另一台机器上,对任何文件的一次更改都会触发所有源的重新编译。

只是要清楚。两台机器都检测到软件包何时是最新的并且不会做任何事情。只有当单个文件发生更改时,它们的行为才会出现分歧。

为什么第二台机器会这样做?

机器 1(对每个文件进行适当的依赖检查和构建。)

机器 2(当单个源文件更改时重建所有内容。)

0 投票
2 回答
2850 浏览

python - 在 Windows 中安装 Python 包

我最近开始学习 Python,对包的分发和安装方式有些困惑。

我知道安装包的官方方法是distutils:你下载源代码压缩包,解压它,然后运行:python setup.py install,然后模块会自动安装自己

我也知道辅助脚本附带的setuptools 。easy_install它使用鸡蛋进行分发,据我了解,它建立在 distutils 之上并执行与上述相同的操作,此外它还处理所需的任何依赖项,所有这些都从 PyPi 获取

然后还有pip,我仍然不确定它与其他有什么不同。

最后,由于我在 windows 机器上,很多软件包还通过windows 安装程序提供二进制构建,尤其是那些需要编译 C/Fortran 代码的软件包,否则在 windows 上手动编译将是一场噩梦(假设你有 MSVC或具有所有必要库设置的 MinGW/Cygwin 开发环境..尽管如此尝试自己构建 numpy 或 scipy,你会明白的!)

所以有人可以帮我理解这一切,并解释每种方法的区别和优缺点。我想知道每个人如何跟踪包(Windows 注册表、配置文件、..)。特别是,您将如何管理所有第三方库(能够列出已安装的软件包、禁用/卸载等)

0 投票
1 回答
1269 浏览

c++ - Linux下使用distutils交叉编译python扩展

有没有办法在 Linux 下编译 Python/distutils/SWIG/C++ 扩展的 Windows 和 Linux 版本?据我了解,问题至少在于获取 python-dev 的 windows 版本。

谢谢你。

0 投票
1 回答
753 浏览

gcc - 使用 swig 和 distutils 时 GCC 无法识别标准头文件

我正在尝试为我放在一起的 C++ 库生成一个 python 包装器。我刚刚遇到 SWIG,并试图将其与 distutils 结合使用。我正在修改别人的代码,所以会出现奇怪的错误,但这只是令人困惑。

我已经设法用 SWIG 生成了一个 c++ 包装器文件,现在我正在尝试运行 setup.py 的修改版本以安装包装器(它本身可能工作也可能不工作,但我会在它到来时越过那座桥到它。)执行此操作时,会弹出有关无法包含头文件的编译器错误。具体来说 - 字符串、ostream、sstream、map 和向量。所有这些都是标准库,包括在“include”中。

代码本身可以编译,但在尝试以这种方式创建包装器时却没有。

我不完全确定哪些信息与此相关,但这就是扩展的方式:

运行的 gcc 命令是:

gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/home/ben/Project/rewrite/include/Project -I/home/ben/Project/rewrite/包括/项目 -I/usr/include/python2.6 -c ./project_rewrite_wrap.c -o build/temp.linux-i686-2.6/./project_rewrite_wrap.o

这会导致错误,例如:

./project_rewrite_wrap.c:2696:18:错误:字符串:没有这样的文件或目录

任何想法将不胜感激,谢谢。

0 投票
1 回答
2671 浏览

python - 更改 distutils 使用的 gcc 版本

我在 Snow Leopard 上,希望 distutils 使用 gcc 4.0 而不是 4.2,谁能告诉我如何让它做到这一点?我尝试更改 /usr/bin/g* 符号链接,并设置 C* 环境变量——但无济于事。有什么想法吗?

0 投票
2 回答
2630 浏览

python - 将 Python 扩展 (.pyd) 动态链接到另一个扩展

Python 扩展模块只是动态库,所以我认为可以将 Python 扩展动态链接到另一个。问题在于 Windows Python 扩展被赋予.pyd扩展名而不是.dll,所以当我运行安装脚本时,我无法让 distutils 链接到它们。(我认为这在 UNIX 上不是问题,因为 Python 扩展使用.so文件扩展名。)

假设我有一个bar.pyd需要链接到foo.pyd. 基本上,我在设置脚本中所做的是:

到目前为止,这行不通。这甚至可能吗?我认为是,但我一直无法在网上找到任何东西。我在 Windows 上使用 MinGW,但我希望它可以与不同的 MSVC++ 以及其他系统一起使用。

编辑:以前,我通过将编译时foo.o创建的目标文件(fooextra_objectsfoobar

这似乎不是正确的解决方案,但它确实有效。我不太了解动态链接,所以这可能是正确的方法。不过感觉很不对劲。

然后,我尝试将一些显式参数传递给 gcc 以使其编译导入库:

然后我链接bar到新的导入库:

编译时没有抱怨,但某些符号存在一些问题(具体来说,我有一些全局PyTypeObjectsfoo似乎在 . 中重新定义bar。我需要PyTypeObject两个模块中的 s 引用相同的定义。)。

编辑2:所以,我挑出了问题。在我构建并链接到导入库后,函数符号正确导出,但PyTypeObjects 被重新声明。假设有一个PyTypeOject Foo_Typein foo。我在 中声明了它foo.h,它包含在foo.c和中bar.c

我把它拿出来,把它放在顶部附近foo.c

这在顶部附近bar.c

这解决了问题。然后我可以在两者中使用 Foo_Type,foo并且bar它引用了 Foo_Type 的相同定义。问题是,这不适用于非 Windows 系统。我想如果我只是把__declspecs 拿出来,它会在其他系统上正常工作。

0 投票
1 回答
134 浏览

python - Python distutils.Extension :设置并发级别

我想知道如何make -j<n>使用 distutils.Extension 在 setup.py 上重现等效的 a ,以便构建 Python 2.6 的 C 扩展。

我想要的结果:同时setup.py build使用我的 C 编译器的几个实例,而不仅仅是一个。

我可能缺少一两个环境变量。

谢谢,弗洛里安

0 投票
2 回答
77376 浏览

python - 使用 Pip 安装 Python 包时如何使用 MinGW 的 gcc 编译器?

我配置了 MinGW 和 distutils,所以现在我可以使用以下命令编译扩展:

将使用 MinGW 的 gcc 编译器并安装软件包。为此,我安装了 MinGW 并创建了具有以下内容的distutils.cfg文件:

这很酷,但现在我想使用所有点子好处。有没有办法在 pip 中使用相同的 MinGW 的 gcc 编译器?所以当我运行这个时:

pip 将使用 MinGW 的 gcc 编译器并在需要时编译 C 代码?

目前我收到此错误:Unable to find vcvarsall.bat. 似乎 pip 不知道我有 gcc 编译器。如何配置 pip 以使用 gcc 编译器?

0 投票
3 回答
609 浏览

python - 使用 distutils 的 data_files 位置不正确

distutils 文档指定当 data_files 的目标目录是相对路径时,文件将相对于sys.prefix. 在我的系统(Linux Mint)上,这是/usr; 但是,data_files 改为安装到/usr/local.

我怎样才能在不失去跨平台支持的情况下纠正这个问题?

0 投票
2 回答
3012 浏览

python - 如何使用 distutils 处理配置文件以尊重 unixen 的 FHS?

假设我们有一个名为foo.

如果使用绝对路径:

然后foo$ python setup.py --prefix=/usr/local,我们将拥有/etc/foo.cfg. /usr/local/etc/foo.cfg但是根据FHS我们应该有。

如果我们使用相对路径呢?

那么如果我们使用默认的安装路径,即安装到/usr,我们将拥有/usr/etc/foo.cfg. 又倒霉了。

那么怎么做才对呢?

PS为了避免问题更加复杂,我们假设这个程序 foo不能在非unix环境下运行。