- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个带有 C++ 扩展名的 Python 包。我正在尝试使用 setuptools 来执行此操作,因为这似乎是首选解决方案。鉴于它允许 setup_requires、install_requires,我同意并将其用于我的 python 包。但是,当我有一个 c++ 扩展模块时,我无法让它工作。然后我求助于 distutils.core 让它工作。我想知道如何使用 setuptools 让它工作。我的设置脚本看起来像
from setuptools import setup
import shutil
import os
# folder where .so is being build by cpp compilation
so_src = os.path.join(dir, 'cpp/build/')
# folder where .so should live in python package
so_des = os.path.join(dir, 'package_py/cpp/')
# extension module
lib_files = ['cpp_py.so']
# copy shared lib
for f in lib_files:
shutil.copyfile(so_src + f, so_des + f)
# set-up script
setup(
name=DISTNAME
, version=FULLVERSION
, description= DESCRIPTION
, author= AUTHOR
, author_email= EMAIL
, maintainer= AUTHOR
, maintainer_email= EMAIL
, long_description=LONG_DESCRIPTION
, packages=['package_py',
'package_py.cpp']
, package_dir={'package_py.cpp': 'package_py/cpp'}
, package_data={'package_py.cpp': lib_files}
)
这会在我的 python 站点包中生成一个 package_py-0.0.1-py3.6.egg 文件。该软件包仅在从安装文件夹使用时有效。
更改第一行以使用 distutils.core 而不是 setuptools
from distutils.core import setup # only change, remainder is the same!!
import shutil
import os
# folder where .so is being build by cpp compilation
so_src = os.path.join(dir, 'cpp/build/')
# folder where .so should live in python package
so_des = os.path.join(dir, 'package_py/cpp/')
# extension module
lib_files = ['cpp_py.so']
# copy shared lib
for f in lib_files:
shutil.copyfile(so_src + f, so_des + f)
# set-up script
setup(
name=DISTNAME
, version=FULLVERSION
, description= DESCRIPTION
, author= AUTHOR
, author_email= EMAIL
, maintainer= AUTHOR
, maintainer_email= EMAIL
, long_description=LONG_DESCRIPTION
, packages=['package_py',
'package_py.cpp']
, package_dir={'package_py.cpp': 'package_py/cpp'}
, package_data={'package_py.cpp': lib_files}
)
我在站点包中得到一个 package_py 文件夹(带有 .so 文件)和 package_py-0.0.1-py3.6.egg-info。现在该模块适用于所有文件夹。
因为我想扩展 python 包以也使用 setup_requires,instal_requires 我想真正使用 setuptools。我怎样才能使用 setuptools 而不是 distutils.core 让包在所有文件夹中工作
最佳答案
如果您使用的是 C 扩展,您还应该使用 setuptools
或 distutils
中的 Extension
,它不是 python 包,所以我很惊讶它甚至设法安装。如果您打算将软件包分发给其他人,则不应事先编译扩展,而应在软件包安装期间对其进行编译,以便用户的系统对其进行适当的编译(即,.so
文件不会'帮助需要将其编译成 .dll
文件等的 Windows 用户。
尝试这样的事情:
from setuptools import setup, Extension
import shutil
import os
# I don't know how you want to build your extension or your file structure,
# so removing the build stuff.
your_modulename=Extension('_extensionname',
sources=['path/to/extension.cpp', 'more/file/paths'],
language='c'
)
# set-up script
setup(
name=DISTNAME
, version=FULLVERSION
, description= DESCRIPTION
, author= AUTHOR
, author_email= EMAIL
, maintainer= AUTHOR
, maintainer_email= EMAIL
, long_description=LONG_DESCRIPTION
, ext_modules=[your_modulename]
, packages=['package_py']
)
希望这对您有所帮助,或者至少让您走上正轨。
关于python - distutils.core 与带有 C++ 扩展的 setuptools,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44323474/
这似乎是一个常见问题,但没有一个答案似乎有帮助。在 Windows 10 中安装 statsmodels 时弹出错误(已安装 python 3.6.2): python setup.py instal
Python 在可用于打包和描述项目的工具方面有着令人困惑的历史:这些工具包括标准库中的 distutils、distribute、distutils2 和 setuptools(可能还有更多)。 d
D:\anzhuang\anconda\lib\distutils\__init__.py:14: UserWarning: The virtualenv distutils package at %
I was trying to have a virtualenv set up where it is at python 3.8 while my system is at a more r
我正在尝试通过安装 nose 并输入 来测试我的 scipy 安装 import scipy scipy.test('1','10') 我遇到了大约 200 个错误,但最常见的错误之一是: ....
我使用sudo apt-get install python3-pip安装了pip3之后,当我运行以下命令来安装Django sudo pip3 install django时,出现此错误: Trac
为什么这会创建 2 个 tar.gz 文件,‘python setup.py sdist ?我正在尝试使用上传twine upload -r pypitest dist/*.tar.gz我得到错误说
在某些情况下,由于pypi服务器已经上传了保存版本,因此我想使python setup.py upload失败时自动执行上传过程中的错误。 如何强制其从脚本上传(我知道我可以使用网络界面删除旧版本)。
我正在linux中编译一些cython扩展,并注意到从distutils机制进行构建时,它默认使用-O2。我想知道是否有一种简单的方法可以将其更改为-O3。 我尝试在Extension对象上使用ext
我继承了 Fortran 77 代码,该代码实现了多个子例程,这些子例程通过程序 block 运行,每次运行程序时都需要通过交互式命令提示符进行大量用户输入。由于我想自动运行代码,因此我将所有子例程移
我有一个简单的纯 python 项目,我想将其与 distutils 一起使用。我已成功为 python 模块和一些许可证文本文件创建压缩 tar 文件。这些是 setup.py 的相关部分setup
我一直在开发一个包含大量文件的 Python 扩展模块。在一台机器上构建时,python setup.py build 会很高兴地检测更改的文件,仅构建这些文件,并将整个文件链接在一起,就像 make
所以可以使用distutils创建文件,比如 PIL-1.1.6.win32-py2.5.exe 您可以运行并使用它来轻松安装某些东西。但是,安装需要用户输入才能继续(您必须单击“确定”三次)。我想创
我已经用 C 编写了一个 Python 扩展库,目前我正在使用 distutils 来构建它。我还有一个生成 .h 文件的 Python 脚本,我想将其包含在我的扩展中。 是否可以使用 distuti
我找到了Question#1321270用于安装后。我目前的主要目标是 bdist_wininst,但我没有找到任何与卸载相关的内容... 澄清一下: 我想在安装后注册一个com服务器并在卸载前取消注
是否可以让 distutils 只运行 python 模块依赖性分析(并可能安装丢失的模块)而不实际安装有问题的 python 模块?我想象一个命令如下: ./setup.py check-depen
我已阅读文档,但我不明白。 为什么我必须使用 distutils 来安装 python 模块? 为什么我不能将模块保存在 python 路径中? 最佳答案 您不必使用 distutils。您可以手动安
我写了一个 boost-python 扩展,目前正在通过 distutils 构建。 不幸的是,我无法在 distutils 中找到一种方法来构建没有调试符号的扩展,或者在安装时从扩展中删除符号。 注
也许是个愚蠢的问题,但我想知道 Python 的 distutils 从哪里获得编译器选项?它得到了一些链接目录错误,我想一劳永逸地纠正它。 我知道应该有一个 prefix/lib/pythonver
例如,我可以使用 python setup.py build --compiler=msvc 或 python setup.py build --compiler=mingw32 或只是 python
我是一名优秀的程序员,十分优秀!