在Python中安装本地额外模块
我的包 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
选项。
- 把Y的压缩包上传到某个网址
http://URL_Y
。 - 在我的setup.py文件中添加这一行:
dependency_links = ['http://URL_Y'],
。
现在easy_install X[Y]
可以正常工作了,我也不需要在任何地方注册Y。等我找到一个合适的解决办法后,我会把它从URL_Y上删除。