在 Python 中安装本地附加组件

发布于 2024-11-17 13:44:26 字数 364 浏览 3 评论 0原文

我的包 X 的 setup.py 使用 setuptools 通过 extras_require 参数有选择地安装额外的包 Y。

现在,Y 包从 PyPi 中消失了,据我所知,也从可见的互联网上消失了。 easy_install X[Y] 失败并出现 错误:无法找到适合 Y 的发行版

不过,我仍然有 Y 的 tarball 的本地副本。 Y 是一个纯Python 包。

修改 setup.py 以允许此(本地?)可选额外功能的最佳方法是什么?


编辑:修复是暂时的,直到我找到合适的替代品。我不想想自己开始正式维护 Y :)

setup.py of my package X uses setuptools to optionally install an extra package Y, via the extras_require parameter.

Now package Y disappeared from PyPi and, as far as I can tell, from the visible Internet. easy_install X[Y] fails with error: Could not find suitable distribution for Y.

However, I still have a local copy of Y's tarball. Y is a pure-Python package.

What is the best way to modify setup.py to allow this (local?) optional extra?


EDIT: The fix is meant to be temporary, until I figure out a proper replacement. I do not want to start officially maintaining Y myself :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

暗藏城府 2024-11-24 13:44:26

您可以子类 setuptools.Command 然后重载默认安装命令。然后你可以让它执行一个安装依赖项的子进程。这是一个黑客,但这就是你所要求的!

在 setup.py 中:

from setuptools import Command
class MyInstallCommand(Command):
    # Overload the 'install' command to do default install but also install
    # your provided tarball. Blah blah blah read the docs on what to do here.

setup(
    name='mypackage',
    # etc ... and then...
    # Overload the 'install' command 
    cmdclass={
        'install': MyInstallCommand, 
    }
)

我过于简单化了它,但这是基本要点。

You could subclass setuptools.Command and then overload the default install command. Then you could have THAT execute a subprocess that installs the dependency. It's a hack, but that's what you were asking for!

In setup.py:

from setuptools import Command
class MyInstallCommand(Command):
    # Overload the 'install' command to do default install but also install
    # your provided tarball. Blah blah blah read the docs on what to do here.

setup(
    name='mypackage',
    # etc ... and then...
    # Overload the 'install' command 
    cmdclass={
        'install': MyInstallCommand, 
    }
)

I'm grossly oversimplifying it, but this is the basic gist.

或十年 2024-11-24 13:44:26

我通过 setuptools 的 dependency_links 选项找到了一个快速解决方法。

  1. 将 Y 的 tarball 上传到某个网址 http://URL_Y
  2. 将行:dependency_links = ['http://URL_Y'], 添加到我的 setup.py 中。

现在 easy_install X[Y] 可以工作了,我不必在任何地方注册 Y。一旦我得到适当的修复,我就会将其从 URL_Y 中删除。

I found a quick workaround via the dependency_links option of setuptools.

  1. Upload Y's tarball to some url http://URL_Y.
  2. Add the line: dependency_links = ['http://URL_Y'], to my setup.py.

Now easy_install X[Y] works and I didn't have to register Y anywhere. I will delete it from URL_Y as soon as I have a proper fix.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文