【问题标题】:Is it possible to create pip packages for a specific operating system?是否可以为特定操作系统创建 pip 包?
【发布时间】:2021-04-09 07:05:42
【问题描述】:

我只是想知道这是否可能。例如,假设我只想为 Linux 构建一个 pip 包,或者为 Windows 和 Mac 构建一个 pip 包但不包括 Linux,是否可以这样做?还是所有 pip 包在发布后都可用于所有 3 个平台(Windows、Mac 和 Linux)?

再举一个例子,假设 Stripe 想要发布其 Python SDK 并通过 pip 为 Python 用户提供 Mac-only,这可能吗?

我绝对会感谢所有答案,因为我很想知道这是否可能!我只是想知道这是否可能。感谢那些做出回应的人。

【问题讨论】:

    标签: python pip setuptools python-packaging


    【解决方案1】:

    您必须同时考虑 sdistwheel 分布。

    对于sdist,你无能为力,它们是多平台时期。您可以在setup.py 中添加安全防护,以便在某些平台上运行它会失败,但这远非优雅。最佳做法是通过“trove classifiers”清楚地记录您的项目仅适用于特定平台,例如通过您的long_description 和/或README

    对于 wheel,您可以只构建特定平台的车轮,这是车轮擅长的事情之一:

    但最佳实践建议您在任何情况下也发布 sdist,因此在其他平台上,安装程序将回退到 sdist

    总而言之,您可以构建特定于平台的wheels,但不能构建特定于平台的sdist。正确记录您的项目(使用 trove 分类器)以声明支持哪些平台。

    【讨论】:

    • 感谢您的回答!所以基本上我不能限制源代码分发(通过 sdist),但我可以限制人们通过 pip 安装 Python 包?希望我读对了,如果我没有读错,我深表歉意。它还必须是我可以限制的特定于平台的代码吗?或者它也可以是纯 Python 代码,开发人员也可以限制安装到某些平台?
    • 调用pip安装Thing时,首先pip会尝试寻找一个与当前环境(pip运行所在)兼容的Thing轮子,如果pip 没有找到一个好的轮子候选,然后它试图找到 Thing 的 sdist。不同之处在于轮子可以是特定于平台的。例如,事物可能有用于 Windows 的轮子和用于 Linux 的轮子。如果您在 Mac 上,则没有 Mac 轮,pip 将退回到 sdist。而且 sdist 从来都不是特定于平台的。例如:pypi.org/project/cryptography/#files
    猜你喜欢
    • 2012-06-09
    • 2013-04-07
    • 1970-01-01
    • 2016-08-03
    • 2012-05-09
    • 2013-03-28
    • 2011-12-31
    • 1970-01-01
    • 2010-12-31
    相关资源
    最近更新 更多