小编Bri*_*den的帖子

Python轮力ABI为"无"

我认为这是一个简单的问题,但我还没有找到答案,所以我在这里发帖.

我有一个Python 3应用程序,我打包成一个平台轮.我有setup.py,一切都按预期工作.我唯一想知道的是生成的轮子总是包含一个ABI标签(如"cp34m"),当包含它时,我发现我实际上无法通过pip安装轮子.(我的构建脚本在运行之前会安装最新的pip,setuptools和wheel.)

解决方案很简单.我只需更改滚轮的文件名即可将"cp34m"更改为"none".这显然很容易添加到我的构建脚本中,但我想知道是否可以为bdist_wheel设置一个选项,以便生成的.whl文件没有自己设置?

我用来创建轮子的命令是(例如在x64上):

python setup.py bdist_wheel --plat-name win_amd64

这创造了一个像:

mpf_mc-0.30.0.dev269-cp34-cp34m-win_amd64.whl

然后在上传到PyPI之前重命名为:

mpf_mc-0.30.0.dev269-cp34-none-win_amd64.whl

通过手动重命名它似乎一切正常.但我想知道这是否是正确的方法,或者我错过了什么?

python python-wheel

13
推荐指数
1
解决办法
1211
查看次数

添加到在Python中迭代的deque?

我在Python中有一个deque,我正在迭代.有时候,当我正在进行交互时,deque会发生变化RuntimeError: deque mutated during iteration.

如果这是一个Python列表而不是一个双端队列,我只是迭代一个列表的副本(通过一个切片my_list[:],但由于切片操作不能用于deques,我想知道什么是最pythonic处理这个的方法是?

我的解决方案是导入复制模块,然后迭代一个副本,这样for item in copy(my_deque):很好,但因为我搜索了这个主题的高低,我想我会在这里发帖询问?

python deque

11
推荐指数
1
解决办法
5663
查看次数

使用Python setuptools将Cython编译的pyd文件放在原始文件夹中?

我正在尝试为包含Cython模块的Python 3.4应用程序构建setup.py包.我的计划是有一个setup.py文件需要Cython并编译.pyx文件的想法通常我会在Win32(x86和x64)和Mac上运行它然后生成平台轮并将它们上传到PyPI,所以普通用户不需要Cython或编译任何东西.

目前我可以获取setup.py脚本来构建.pyd文件,但是它不会将构建的.pyd文件放在与原始.pyx文件相同的位置,这是我需要它的地方.

我尝试手动复制.pyd文件,但是当我通过bdist_wheel生成轮子时,我得到一个纯Python轮,我认为是错误的,因为根据平台,我的内置.pyx文件有不同版本.我还尝试了对Distribution类进行子类化并强制is_pure()返回False(如此处在Building Wheels部分中所述),但这不起作用.(仍然生成纯Python轮.)

我假设如果我可以获得setup.py脚本将编译后的文件放在正确的位置,那么轮子将不是纯Python,一切都会好的.

所以我的问题是:

  1. 在setup.py中是否有某种设置告诉它将已编译的Cython文件放入与源文件相同的位置?
  2. 或者有没有办法将编译后的文件复制到我需要它们的位置,但是仍然可以将轮子构建为非纯粹的?
  3. 或者我是以错误的方式解决这个问题.我应该更改我的Python代码以从其他地方提取已编译的包吗?(这对我来说似乎不对.)
  4. [编辑]或者我应该将已编译的二进制文件.pyd/.so/.dylib放入包中,添加逻辑以在运行时基于体系结构获得正确的.pyd,然后使用纯Python轮?(这对我来说也不合适.)

有关我的设置的更多信息:我在setup.py脚本中使用setuptools(而不是distutils).我的setup.py的片段在这里(删除了很​​多东西以保持相关的东西):

from setuptools import setup, Extension
from Cython.Build import cythonize
from Cython.Distutils import build_ext

...

extensions = [
    Extension(name='audio_interface',
              sources=['mpf/mc/core/audio/audio_interface.pyx'],
              include_dirs=include_dirs,
              library_dirs=library_dirs,
              libraries=libraries,
              extra_objects=extra_objects,
              extra_compile_args=extra_compile_args,
              extra_link_args=extra_link_args),

...

setup(
      ...
      ext_modules=cythonize(extensions),
      cmdclass= {'build_ext': build_ext},
      ...
Run Code Online (Sandbox Code Playgroud)

谢谢!布赖恩

python setuptools pyd cython

5
推荐指数
1
解决办法
1506
查看次数

Sphinx 文档/RST 包含动态路径中的文件?

我想知道是否可以在 Sphinx 和/或 RST..include::指令中使用动态路径?

我这样做的原因是我在一个存储库中拥有 Sphinx 生成的一些开发人员文档,但我们在另一个存储库中有一堆单元测试,我们希望将其包含在文档中。如果我知道其他存储库中文件的路径,那么它是非常标准的,如下所示:

Some text in my RST file

.. include:: ../path/to/other/repo/file.py
:code: python

Some more text
Run Code Online (Sandbox Code Playgroud)

问题是其他存储库的相对路径并不总是相同,具体取决于克隆和安装的方式。例如,在阅读文档时,另一个存储库通过子文件夹以可编辑模式安装requirements.txt/src本地存储库位于 git 文件夹中,等等。

我可以在conf.py文件中添加逻辑来查找其他存储库并设置一个可以在 RST 文件中使用的指针,但我无法弄清楚是否可以在..include::?

到目前为止,我能想到的唯一解决方法是让我conf.py找到另一个存储库并创建一个我在 RST 文件中引用的符号链接,这很好,但我想知道是否有更好的方法?

restructuredtext python-sphinx

5
推荐指数
1
解决办法
2280
查看次数