- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试实现答案https://stackoverflow.com/a/57480599/7482208 ,但我坚持从另一个包导入一个包。
代码在这里:https://github.com/iamishalkin/setuptools_cython_question
我想要的是从包装器文件夹中获得一个独立的包wrap
,这样您就可以在没有cust
包的情况下使用它。
而且我还希望能够通过从 wrap
继承 FuncWrapper
类来创建自定义函数。
我做什么:
wrapper
文件夹中运行 python setup.py bdist_wheel
(我想这就是我做错的事情,因为它只给我二进制文件)<pip install dist/(some_name).whl
importwrapper
和 include_dirs=wrap.get_include()
添加到 custom/setup.py
,就像在 中完成的那样>numpy
custom
文件夹中运行 python setup.py bdist_wheel
但失败了,第一步,除了二进制文件之外,没有创建任何文件所以问题是:如何将 .pxd
文件添加到最终包中。
我还尝试了 sdist
它不编译 cython 代码,只是复制它。
最佳答案
正如我在评论中所说,the Cython documentation recommends putting .pxd files in package_data
to install them 。这需要稍微不同的结构:
| setup.py
+ wrapper
| wrap.pxd
| wrap.pyx
| __init__.py # just so it's recognised as a package
# may be unnecessary with recent Python versions
setup.py 然后创建一个名为包装器的“包”(这是根据您的版本进行修改的,因此可以进一步简化):
from setuptools import setup, Extension
from Cython.Build import cythonize
from Cython.Distutils import build_ext
NAME = "some_name"
ext_abc = Extension(name="wrapper.wrap",
sources=["wrapper/wrap.pyx"]
)
EXTENSIONS = [
ext_abc
]
if __name__ == "__main__":
setup(
zip_safe=False,
name=NAME,
packages=["wrapper"],
cmdclass={"build_ext": build_ext},
ext_modules=cythonize(EXTENSIONS, language_level=3),
package_data = {
"wrapper": ["*.pxd"],
},
)
请注意,我已将扩展名更改为“wrapper.wrap”,以确保它作为包的一部分安装。然后,package_data
能够将 .pxd 文件识别为您要安装的 wrapper
的一部分。 除非您将其放入“包”中,否则这不起作用。
然后安装它。我刚刚使用 python3 setup.py install
安装了它,但我确信通过轮子做的事情基本上是相同的。
要让另一个模块使用您的文件,非常简单:
from wrapper.wrap cimport FuncWrapper
其他模块的 setup.py 不需要什么特别的 - 你绝对不需要像 include_dirs=wrap.get_include()
这样的东西。
如果你想要一个不需要子模块的界面,那么就可以这样做
from wrapper cimport FuncWrapper
然后只需使用包含以下内容的__init__.py
:
from .wrap import *
和一个 __init__.pxd
包含:
from wrapper.wrap cimport * # relative import is a little broken in Cython I think
<小时/>
我确信还有其他方法可以做到这一点 - 我只真正使用 setuptools 来编译 Cython 的东西,从来没有真正担心分发太多,所以我不是专家 - 但这看起来是标准方法。
关于python - 设置 setuptools 以创建具有可用 header 的可导入包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57493310/
我目前正在使用 centos 网络管理。我尝试将默认的 python 版本从 2 更改为 3。我已经完成了,您可以从下面的结果中看到: [root@srv ~]# which python /usr/
我无法在 ubuntu 中使用命令行安装 setuptools。我使用了“pip install setuptools”,但它显示错误: Exception: Traceback (most rece
我正在一台新的 Mac 上进行设置,我一直在嗡嗡作响,安装了 pip 和一些软件包。突然间,我尝试运行的每个 pip 命令都会抛出 Exception: Traceback (most recent
我赢了10场。运行时:。我遇到了这个错误:。似乎什么都没有帮助。我试着卸载蟒蛇,得到了一个成功的消息,但似乎有一些旧版本的痕迹仍然存在。我怎样才能完全抹去蟒蛇安装的所有痕迹?
安装时出现此错误。这会导致问题吗? 错误:tensorboard 2.0.2 要求 setuptools>=41.0.0,但您将拥有不兼容的 setuptools 40.6.2。 最佳答案 我刚刚做了
我的 pacakge 有 *.py 文件和 *.c 文件,*.py 文件使用 ctypes 导入共享库 从 c 源构建。 现在我遇到了如何编写 setup.py 的问题。 setup脚本需要将my_c
python中安装包的方式有很多种: 源码包:python setup.py install 在线安装:pip install 包名(linux) / easy_install 包名(
我刚刚更新了一个包以使用 setuptools_scm,并发现 readthedocs 中的版本号错误。 http://sshuttle.readthedocs.org/en/v0.77/显示: Ve
我的项目有下面的包树 └── src | ├── mypkg1 | │ ├── module1.py | │ ├── module2.py | │ └── __in
我的项目有下面的包树 └── src | ├── mypkg1 | │ ├── module1.py | │ ├── module2.py | │ └── __in
我的 Python 模块包含一个外部脚本,用户可以从命令行执行该脚本。我希望用户能够一次性安装 Python 模块和脚本。使用setuptools,我尝试添加: scripts=['bin/mybin
我对 python 中的设置工具还不太熟悉。我最近向我的项目添加了一个依赖项并遇到了依赖项的问题。问题是: try: from setuptools import setup except I
假设我有一个 setuptools 项目依赖于 PyPi 包 A,1.0 版。 PyPi 包 B,1.0 版。 包 B 依赖于 A,v. 2.0。 在 Java 中,我必须排除 pom.xml 或类似
我有一个 Python 脚本,有几个外部依赖项,我想分发给同事。但是,我们需要定期修改此脚本,所以我不想安装本身(即复制到 site-packages)。据我所知,setuptools 似乎隐含地执行
我正在为一个 python 项目设置一个持续交付系统,我正在尝试弄清楚如何通过 egg_info 设置项目构建的整个版本字符串。 我正在使用 thoughtworks GO,它有一个名为 GO_PIP
我在 setup.py 中有以下内容: from setuptools import setup # ... setup( name='xml-boiler', version='0.
当我运行我的应用程序时,我的应用程序引擎日志给我这个错误: WARNING 2012-03-01 23:27:31,089 py_zipimport.py:139] Can't open zipfi
我正在使用 setuptools 打包一个 python 应用程序,通常运行 python setup.py install 并将所有内容打包到一个 egg 中并安装它。 问题是我希望将它安装为可编辑
我无法卸载设置工具。怎么会? $ sudo pip uninstall setuptools Can't uninstall 'setuptools'. No files were found to
我想支持一个界面,新开发人员只需运行 python setup.py test 即可运行我的所有测试。我认为这是合理的。 鉴于我在我的包中定义了几个“额外”(optional features wit
我是一名优秀的程序员,十分优秀!