标签: python-wheel

Python相当于uber-jar

我正在寻找蟒蛇世界中相当于超级罐的东西.

  • 我需要将python包分发到所有三个主要平台(Windows,Mac,Linux).
  • 它必须与其所有依赖项捆绑在一起,因为目标平台可能缺少互联网.
  • 它必须是跨平台分发,因此我不必为多个目标构建.也就是说,我应该可以在所有平台上运行它,如下所示:

    python package.ext

您可以假设该包是纯python(没有本机代码). 有什么能满足这些要求吗?

我知道以下选项,每个选项都有不足之处:

python windows packaging uberjar python-wheel

7
推荐指数
1
解决办法
667
查看次数

从 PyPi 下载轮子

如何从PyPi 上列出的包中下载特定的轮子?我假设我会使用wgetor curl,但我不确定要使用哪些参数。

curl wget pypi python-wheel

7
推荐指数
2
解决办法
1610
查看次数

Python 如何从 .whl 文件中获取版本号

由于一些自定义日志记录,我想从轮文件中获取版本号。

我当然可以只解析文件名,但我猜会有更好的方法来做到这一点。

python python-wheel

7
推荐指数
1
解决办法
1329
查看次数

使用 manylinux + auditwheel 打包 pip 轮子 vs. Conda

描述

所以我希望打包一个需要科学库的相当复杂的 python 应用程序。这个问题有点类似于stackoverflow pip vs conda 的讨论,但它没有详细介绍自 2016 年以来 linux 轮子的二进制打包可用的差异。 我已经看到pypi/cryptography使用 manylinux 并通过 pypi 轮子分发二进制文件。另一个包 mpi4py 只发布 conda 的二进制包,只是因为困难。甚至可以说二元轮不适合这项任务。

通过轮子共享库打包与 conda 相比是什么样的?截至 2018 年,通过轮子共享库打包是否值得?

要求

我的包裹需要

  • 开放式
  • fftw3
  • openmpi

我的所有静态二进制文件大约为 100Mb,因此它确实需要很多共享库。许多我还指出,即使对我自己来说,安装也是一种巨大的痛苦......我无法想象尝试自己安装它的人会是什么样子。到目前为止,我有一个可用的 docker 容器。

python conda python-wheel python-manylinux conda-build

7
推荐指数
0
解决办法
451
查看次数

Python 轮:安装包后出现“ModuleNotFoundError”

操作系统: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 module egg python-wheel

7
推荐指数
1
解决办法
5368
查看次数

为纯 Python 包构建发行版有什么意义?

人们可以将 Python 作为源发行版.tar.gz格式)或构建发行版(轮子格式)来共享。

据我了解,构建发行版的要点是:

  • 节省时间:编译可能非常耗时。我们可以在服务器上执行一次并为许多用户共享。
  • 降低要求:用户不必安装编译器

然而,bdist 文件的这两个参数似乎不适用于纯 python 包。尽管如此,我发现natsort既有 sdist 又有 bdist。以 bdist 格式共享纯 python 包有什么好处吗?

python python-wheel python-packaging

7
推荐指数
1
解决办法
1071
查看次数

使用向后兼容 (MacOS10.9+) 的 MacOS 10.15 (Catalina) 创建 Python C 扩展

如何使用 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 macos pypi python-extensions python-wheel

7
推荐指数
1
解决办法
333
查看次数

setuptools,提前知道本机库的轮文件名

在运行安装脚本之前,有没有一种简单的方法可以知道 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)

我知道作为一种解决方法,我可以拉紧轮子来传递它,但我想知道是否有更干净的方法来做到这一点。

python setuptools python-wheel

7
推荐指数
1
解决办法
1713
查看次数

气流 initdb:未定义符号:Py_GetArgcArgv

我按照文档安装了 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 macos python-wheel

7
推荐指数
1
解决办法
3716
查看次数

PIP安装程序中manylinux1与manylinux2020轮文件之间的区别

我在 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.whlcryptography-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 pip python-wheel python-manylinux

7
推荐指数
1
解决办法
7886
查看次数