问题标签 [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.
python - Python distutils 在不同机器上构建扩展的方式不同
我一直在研究一个包含大量文件的 Python 扩展模块。在一台机器上构建时,python setup.py build
会很高兴地检测到更改的文件,只构建那些文件,并将整个东西链接在一起,就像 make 一样。然而,在另一台机器上,对任何文件的一次更改都会触发所有源的重新编译。
只是要清楚。两台机器都检测到软件包何时是最新的并且不会做任何事情。只有当单个文件发生更改时,它们的行为才会出现分歧。
为什么第二台机器会这样做?
机器 1(对每个文件进行适当的依赖检查和构建。)
机器 2(当单个源文件更改时重建所有内容。)
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 注册表、配置文件、..)。特别是,您将如何管理所有第三方库(能够列出已安装的软件包、禁用/卸载等)
c++ - Linux下使用distutils交叉编译python扩展
有没有办法在 Linux 下编译 Python/distutils/SWIG/C++ 扩展的 Windows 和 Linux 版本?据我了解,问题至少在于获取 python-dev 的 windows 版本。
谢谢你。
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:错误:字符串:没有这样的文件或目录
任何想法将不胜感激,谢谢。
python - 更改 distutils 使用的 gcc 版本
我在 Snow Leopard 上,希望 distutils 使用 gcc 4.0 而不是 4.2,谁能告诉我如何让它做到这一点?我尝试更改 /usr/bin/g* 符号链接,并设置 C* 环境变量——但无济于事。有什么想法吗?
python - 将 Python 扩展 (.pyd) 动态链接到另一个扩展
Python 扩展模块只是动态库,所以我认为可以将 Python 扩展动态链接到另一个。问题在于 Windows Python 扩展被赋予.pyd
扩展名而不是.dll
,所以当我运行安装脚本时,我无法让 distutils 链接到它们。(我认为这在 UNIX 上不是问题,因为 Python 扩展使用.so
文件扩展名。)
假设我有一个bar.pyd
需要链接到foo.pyd
. 基本上,我在设置脚本中所做的是:
到目前为止,这行不通。这甚至可能吗?我认为是,但我一直无法在网上找到任何东西。我在 Windows 上使用 MinGW,但我希望它可以与不同的 MSVC++ 以及其他系统一起使用。
编辑:以前,我通过将编译时foo.o
创建的目标文件(foo
extra_objects
foo
bar
这似乎不是正确的解决方案,但它确实有效。我不太了解动态链接,所以这可能是正确的方法。不过感觉很不对劲。
然后,我尝试将一些显式参数传递给 gcc 以使其编译导入库:
然后我链接bar
到新的导入库:
编译时没有抱怨,但某些符号存在一些问题(具体来说,我有一些全局PyTypeObject
sfoo
似乎在 . 中重新定义bar
。我需要PyTypeObject
两个模块中的 s 引用相同的定义。)。
编辑2:所以,我挑出了问题。在我构建并链接到导入库后,函数符号正确导出,但PyTypeObject
s 被重新声明。假设有一个PyTypeOject Foo_Type
in foo
。我在 中声明了它foo.h
,它包含在foo.c
和中bar.c
:
我把它拿出来,把它放在顶部附近foo.c
:
这在顶部附近bar.c
:
这解决了问题。然后我可以在两者中使用 Foo_Type,foo
并且bar
它引用了 Foo_Type 的相同定义。问题是,这不适用于非 Windows 系统。我想如果我只是把__declspec
s 拿出来,它会在其他系统上正常工作。
python - Python distutils.Extension :设置并发级别
我想知道如何make -j<n>
使用 distutils.Extension 在 setup.py 上重现等效的 a ,以便构建 Python 2.6 的 C 扩展。
我想要的结果:同时setup.py build
使用我的 C 编译器的几个实例,而不仅仅是一个。
我可能缺少一两个环境变量。
谢谢,弗洛里安
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 编译器?
python - 使用 distutils 的 data_files 位置不正确
distutils 文档指定当 data_files 的目标目录是相对路径时,文件将相对于sys.prefix
. 在我的系统(Linux Mint)上,这是/usr
; 但是,data_files 改为安装到/usr/local
.
我怎样才能在不失去跨平台支持的情况下纠正这个问题?
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环境下运行。