我正在开发一个名为garlicsim的软件包. (Website.)该软件包适用于Python 2.X,但我也在另一个名为garlicsim_py3的fork上提供Python 3支持.(1)
因此,这两个软件包并存在PyPI上,Python 3用户安装了garlicsim_py3,Python 2用户安装了garlicsim.
问题是:当第三方模块想要使用garlicsim时,他们应该有一个包名称,而不是两个.当然,他们可以这样做:
try:
import garlicsim
except ImportError:
import garlicsim_py3 as garlicsim
但我宁愿不让这些模块的开发人员这样做.
有没有一种方法,garlicsim_py3将自己安置在别名garlicsim下?我想要的是Python 3用户能够导入garlicsim并始终将该模块称为garlicsim,但它确实是garlicsim_py3.
我知道Distribute项目的确是这样的:他们这样做就可以导入setuptools,它会被重定向到他们的代码中.我不知道他们是怎么做到的.
有任何想法吗?
(1)我已经决定在fork而不是在相同的代码库中支持Python 3;对我来说重要的是代码库是干净的,我真的不想引入兼容性的黑客攻击.
解决方法:
最终我决定不这样做,只是让两个项目具有相同的包名称,即使它们具有不同的PyPI名称.