我正在寻找蟒蛇世界中相当于超级罐的东西.
它必须是跨平台分发,因此我不必为多个目标构建.也就是说,我应该可以在所有平台上运行它,如下所示:
python package.ext
您可以假设该包是纯python(没有本机代码). 有什么能满足这些要求吗?
我知道以下选项,每个选项都有不足之处:
.whl包需要pip安装..egg包含所有包依赖项..zip文件,但AFAICT,创建这样一个zip的最佳工具是pex(https://github.com/pantsbuild/pex),我认为不支持Windows如何从PyPi 上列出的包中下载特定的轮子?我假设我会使用wgetor curl,但我不确定要使用哪些参数。
由于一些自定义日志记录,我想从轮文件中获取版本号。
我当然可以只解析文件名,但我猜会有更好的方法来做到这一点。
所以我希望打包一个需要科学库的相当复杂的 python 应用程序。这个问题有点类似于stackoverflow pip vs conda 的讨论,但它没有详细介绍自 2016 年以来 linux 轮子的二进制打包可用的差异。 我已经看到pypi/cryptography使用 manylinux 并通过 pypi 轮子分发二进制文件。另一个包 mpi4py 只发布 conda 的二进制包,只是因为困难。甚至可以说二元轮不适合这项任务。
通过轮子共享库打包与 conda 相比是什么样的?截至 2018 年,通过轮子共享库打包是否值得?
我的包裹需要
我的所有静态二进制文件大约为 100Mb,因此它确实需要很多共享库。许多我还指出,即使对我自己来说,安装也是一种巨大的痛苦......我无法想象尝试自己安装它的人会是什么样子。到目前为止,我有一个可用的 docker 容器。
操作系统:Windows 7
蟒蛇:3.6
我正在尝试创建并安装 python 轮包。该建筑工作正常,但是当我在安装模块后将其导入项目时,出现“ModuleNotFound”错误。我的项目具有以下结构:
my_lib/
__init__.py
phlayer/
__init___.py
uart.py
utils/
__init___.py
ctimer.py
Run Code Online (Sandbox Code Playgroud)
我的 setup.py 用于创建轮包:
import setuptools
with open("README.md", "r") as fh:
long_description = fh.read()
setuptools.setup(
name="my_lib",
version="0.0.1",
author="",
author_email="",
description="",
packages=setuptools.find_packages(),
classifiers=(
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
),
)
Run Code Online (Sandbox Code Playgroud)
在 uart.py 中我这样做:
from utils import ctimer
Run Code Online (Sandbox Code Playgroud)
安装后,我将包导入到另一个项目中:
#Test.py
from my_lib.phlayer.uart import Uart
def main(args=None):
pass
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
我收到错误:
File "C:/.../.../.../Test.py", line …Run Code Online (Sandbox Code Playgroud) 人们可以将 Python 作为源发行版(.tar.gz格式)或构建发行版(轮子格式)来共享。
据我了解,构建发行版的要点是:
然而,bdist 文件的这两个参数似乎不适用于纯 python 包。尽管如此,我发现natsort既有 sdist 又有 bdist。以 bdist 格式共享纯 python 包有什么好处吗?
如何使用 MacOS 10.15 为向后兼容(MacOS 10.9+)的 MacOS 创建 Python C 扩展轮?
这是我到目前为止:
export MACOSX_DEPLOYMENT_TARGET=10.9
python -m pip wheel . -w wheels --no-deps
python -m pip install delocate
for whl in wheels/*.whl; do
delocate-wheel -w wheels_fixed -v "$whl"
done
Run Code Online (Sandbox Code Playgroud)
不幸的是,pip wheel生成一个文件myapp-0.0.1-cp37-cp37m-macosx_10_15_x86_64.whl,与auditwheelLinux不同的是,delocate-wheel它不会修改轮子的名称。因此,如果我使用 将其上传到 PyPI 上twine,则只有使用 MacOS 10.15 的用户才能使用pip. 我想我可以手动将其重命名为myapp-0.0.1-cp37-cp37m-macosx_10_9_x86_64.whl,但这对我来说听起来不对。
对于构建,我只使用 GitHub Actions MacOS 虚拟机。
谢谢你。
PS:构建使用的编译器是GCC9
在运行安装脚本之前,有没有一种简单的方法可以知道 Python 轮子的文件名?
我正在尝试生成一个 Bazel 规则,为计算机中安装的每个 Python 版本构建一个 .whl,该库包含本机代码,因此需要为每个版本单独编译。Bazel 的问题是它需要提前声明任何输出,我观察到每个 Python 版本都会生成不同的文件名,没有明显的一致性(malloc 和 unicode 的前缀不同)
2.7 --> lib-0.0.0-cp27-cp27mu-linux_x86_64.whl
3.6m --> lib-0.0.0-cp36-cp36m-linux_x86_64.whl
3.8 --> lib-0.0.0-cp36-cp38-linux_x86_64.whl
Run Code Online (Sandbox Code Playgroud)
我知道作为一种解决方法,我可以拉紧轮子来传递它,但我想知道是否有更干净的方法来做到这一点。
我按照文档安装了 Apache-airflow。https://airflow.apache.org/docs/stable/start.html
当我执行airflow initdb时,每次都会出现错误。
x-MacBook-Pro:~ x$ airflow initdb
......
import airflow.utils.dag_processing
File "/Library/Python/3.7/site-packages/airflow/utils/dag_processing.py", line 40, in <module>
from setproctitle import setproctitle
ImportError: dlopen(/Library/Python/3.7/site-packages/setproctitle.cpython-37m-darwin.so, 2): Symbol not found: _Py_GetArgcArgv
Referenced from: /Library/Python/3.7/site-packages/setproctitle.cpython-37m-darwin.so
Expected in: flat namespace
in /Library/Python/3.7/site-packages/setproctitle.cpython-37m-darwin.so
Run Code Online (Sandbox Code Playgroud)
一个答案表明这是二进制包的问题。但我仍然不知道如何解决这个问题。这是链接https://github.com/psycopg/psycopg2/issues/807。
MacOSX 10.15.3
点 20.0.2
蟒蛇 3.7.3
我在 Python 中遇到一个奇怪的问题,问题是cryptography-2.9.2-cp35-abi3-manylinux2010_x86_64.whl在 SLES 操作系统上不起作用。
我将 CI/CD 添加到我的存储库中,当我将包从requirements.txt 下载到本地文件夹时dist-packages。Jenkins Slave 机器在 RedHat Linux 上运行。因此,它是用这个文件下载的,cryptography-2.9.2-cp35-abi3-manylinux2010_x86_64.whl而我的运行时是在 SLES OS 11 中,这需要cryptography-2.9.2-cp35-abi3-manylinux1_x86_64.whl.
这个特定的依赖项cryptography-2.9.2-cp35-abi3-manylinux2010_x86_64.whl是从 RedHat 下载的,当我将其重新分发到 SLES 操作系统时,此依赖项失败并出现以下错误。
ERROR: Could not find a version that satisfies the requirement cryptography>=2.1.4 (from azure-identity->-r requirements.txt (line 2)) (from versions: none)
ERROR: No matching distribution found for cryptography>=2.1.4 (from azure-identity->-r requirements.txt (line 2))
Run Code Online (Sandbox Code Playgroud)
如果我将依赖项名称更改为 ,cryptography-2.9.2-cp35-abi3-manylinux2010_x86_64.whl则cryptography-2.9.2-cp35-abi3-manylinux1_x86_64.whl它在 SLES OS 计算机上工作正常。
当我签入 PyPI https://pypi.org/project/cryptography/#modal-close时(这两个文件大小相同,但哈希值不同)
我想了解python包中manylinux1_x86_64与manylinux2010_x86_64之间的区别。
提前致谢。
python-wheel ×10
python ×9
macos ×2
pypi ×2
conda ×1
conda-build ×1
curl ×1
egg ×1
module ×1
packaging ×1
pip ×1
setuptools ×1
uberjar ×1
wget ×1
windows ×1