我正在为 C++ 库编写一个扩展,以便使用 Pybind11 在 Python 中可用。该库本身依赖于其他几个 C++ 库。
我不明白的是我应该在我的分发包中包含哪些文件以及如何包含。混合了Python 打包指南 和构建 C++ 扩展中的一些代码后,我得到了以下文件
安装程序.py
from setuptools import setup, Extension
#from distutils.core import setup, Extension #used this at first, switched to setuptools. Didn't see the difference
src = ['module.cpp', /*... other cpp files */]
include = ['MyLibrary/include', /*... other header files for 3rdparty libs*/]
module = Extension(
'TestlibPy',
sources = src,
include_dirs= include,
libraries=[/* library names*/]
lib_dirs=[/*library dirs*/]
language='c++',
)
setup(
ext_modules = [module],
)
Run Code Online (Sandbox Code Playgroud)
安装程序.cfg
[metadata] …Run Code Online (Sandbox Code Playgroud) 我想使用诗歌分发一个 python 包并使其作为 cli 可执行,就像black, pipenv, poetry,flake8朋友一样。
示例用法如下:
\npython -m my-package [args]\nRun Code Online (Sandbox Code Playgroud)\n到目前为止,我已经成功构建了一个轮子并使用以下配置将其安装在 docker 映像上:
\npyproject.toml
[tool.poetry]\nname = "my-package\nversion = "0.1.0"\ndescription = "A cli tool"\nauthors = []\npackages = [\n { include = "src/main.py" },\n]\n\n[build-system]\nrequires = ["poetry-core>=1.0.0"]\nbuild-backend = "poetry.core.masonry.api"\nRun Code Online (Sandbox Code Playgroud)\n构建命令:
\npoetry build -f wheel\npoetry export -o dist/requirements.txt\nRun Code Online (Sandbox Code Playgroud)\nDocker 镜像:
\nFROM python:3.8-slim as base\n\nCOPY dist/requirements.txt /requirements.txt\nRUN pip install --no-cache-dir --upgrade -r /requirements.txt\nARG APP_VERSION\nCOPY …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 pip 安装 lxml。我有 Windows 11 和 Python 版本 python-3.10.2-amd64。我也在使用 Visual Studio Code (VSC)。我意识到我需要 lxml 从我的 VSC 终端中的错误消息:
\nTraceback (most recent call last):\nFile "Vegas.py", line 13, in <module>\nsoup = BeautifulSoup(html_text, \'lxml\')\nFile "/usr/lib/python3.6/site-packages/bs4/__init__.py", line 248, in \n__init__\n% ",".join(features))\nbs4.FeatureNotFound: Couldn\'t find a tree builder with the features you \nrequested: lxml. Do you need to install a parser library?\nRun Code Online (Sandbox Code Playgroud)\n从那里,我尝试使用 VSC 终端中的命令安装 lxml:
\npip install lxml\nRun Code Online (Sandbox Code Playgroud)\n我收到此错误消息:
\nCollecting lxml\n Using cached lxml-4.7.1.tar.gz (3.2 MB)\n Preparing metadata (setup.py) ... …Run Code Online (Sandbox Code Playgroud) 在开发用于开发python软件包的virtualenv的过程中,我经常使用“ pip wheel”发行。生成包装所需的所有车轮档案。我通过在setuptools extras_require参数中列出条件依赖项来开始使用它们。是否可以生成特定条件依赖项的车轮档案?
不支持类似“ pip wheel“。[conditional_feature]”的内容。(至少在python-2.7上)请注意,我可以使用以下命令在virtualenv中安装这些依赖项:pip install -e“。[conditional_feature]”
我想将另一个轮文件中的本地分发.whl文件捆绑为依赖项.
dist_pkg1.whl(引用的wheel文件,是本地文件)
dist_pkg2.whl依赖于dist_pkg1.whl,我需要在dist_pkg2.whl中嵌入dist_pkg1.whl,这样,每当我安装dist_pkg1.whl时,dist_pkg2.whl应该作为依赖项安装.有什么方法可以解决这个问题吗?
有没有办法可以将外部python模块和包包含到我的.egg文件中,就像我们使用嵌入的外部java库构建.jar文件一样?
具体来说,我在我的代码中使用langdetect和nltk模块.是否可以打包嵌入这些模块的代码,这样我就可以直接在另一台机器上运行生成的.egg文件,而无需在新机器上安装这些模块?
Christoph Gohlke用于Python扩展包的非官方Windows二进制文件中用于Python轮的命名约定是什么 ?
例如,对于scipy,页面上有两个轮子名称:
SciPy的-0.17.0或更新-cp27-NONE-win32.whl
SciPy的-0.17.0或更新-cp27-NONE-win_amd64.whl
"没有"表示什么?
win32和win_amd64有什么区别?
如果我使用的是x86或x86-64版本的Python(参考Python 2.7.11),这有关系吗?
对于我编写的程序包,我已经完成了python setup.py sdist bdist_wheel,它会在dist/目录中生成一些程序包工件。现在,我想在那些工件中运行包的单元测试。有什么好方法吗?
需要明确的是:一种替代方法是直接从本地源文件运行测试,但是我要避免这种情况,以确保我正在测试用户将要安装的确切的预制构件(如此处建议)。
我正在使用Python 3,并且在Linux或Mac OS环境中。我的上下文是一个构建服务器,它在对Git存储库进行提交时生成,测试然后发布工件(到类似PyPI的私有仓库)。
如果还有其他方法我应该改用,那么我很听。
在任何地方(PEP或其他地方)是否有任何限制声明Linux轮子上传到PyPI的范围有多广?具体来说:将linux_x86_64轮子上传到PyPI 是否被认为是可接受的做法,而不是manylinux1_x86_64当我们无法构建后者时 - 由于外部C库依赖于更新的glibc?
使用PEP 425平台标签构建工具[3]不会跟踪有关特定Linux发行版或已安装系统库的信息,而是将所有轮子分配给过于模糊的linux_i686或linux_x86_64标签.由于这种模糊性,不期望在一台机器上编译的带linux标记的内置发行版在另一台机器上正常工作,因此,PyPI不允许为Linux上传轮子.
和"PyPI支持":
PyPI应该允许上传包含manylinux1平台标签的轮子.PyPI不应尝试正式验证包含manylinux1平台标记的车轮是否符合本文档中描述的manylinux1策略.此验证任务应留给其他工具,如auditwheel,这些工具是单独开发的.
当我尝试使用pip安装.whl时
它说:
在此平台上不受支持
为了解决这个问题,我搜索了互联网,并说我可以将其输入外壳
进口点 打印(pip.pep425tags.get_supported())
这样我就可以获得pip支持的文档和版本
但是,当我输入这些代码时,它说:
模块“ pip”没有属性“ pep425tags”
怎么了?
python ×10
python-wheel ×10
pip ×3
setuptools ×2
build ×1
c++ ×1
easy-install ×1
linux ×1
lxml ×1
packaging ×1
pypi ×1
setup.py ×1
testing ×1