在Python中安装本地额外模块

6 投票
2 回答
1083 浏览
提问于 2025-04-16 20:25

我的包 X 的 setup.py 文件使用 setuptools 来选择性地安装一个额外的包 Y,这个通过 extras_require 参数来实现。

现在包 Y 从 PyPi 上消失了,似乎在可见的互联网中也找不到了。使用 easy_install X[Y] 会失败,并显示 error: Could not find suitable distribution for Y 的错误信息。

不过,我手里还有 Y 的压缩包的本地副本。Y 是一个纯 Python 的包。

我该如何修改 setup.py 文件,以便允许这个(本地的)可选包呢?


补充说明:这个修复只是暂时的,直到我找到一个合适的替代品。我想自己开始正式维护 Y :)

2 个回答

1

你可以创建一个新的类,继承自 setuptools.Command,然后重写默认的 install 命令。这样,你就可以让这个命令去执行一个子进程,来安装所需的依赖。这虽然有点绕,但正是你想要的方式!

在 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, 
    }
)

我这样说可能有点简单化,但大概就是这个意思。

1

我找到了一种快速的解决方法,通过使用setuptools的dependency_links选项。

  1. 把Y的压缩包上传到某个网址http://URL_Y
  2. 在我的setup.py文件中添加这一行:dependency_links = ['http://URL_Y'],

现在easy_install X[Y]可以正常工作了,我也不需要在任何地方注册Y。等我找到一个合适的解决办法后,我会把它从URL_Y上删除。

撰写回答