我的软件包依赖于最新版本的jsonpickle软件包。旧版本可以通过pip安装,但是我需要最新版本(即在Github上)才能工作。在这种情况下,通常认为在我的代码中捆绑最新版本的jsonpickle是正常的吗?还有其他解决方案吗?我宁愿不要求我的用户不要从github克隆。
我正在考虑像这样组织我的包:
My package
|
__init__.py
file1.py
file2.py
\
jsonpickle (latest)
答案 0 :(得分:3)
正如卡格所说,这通常不是一个好主意。并不是因为对其他软件包不友好而“不赞成”,而是它会给您和您的用户带来维护负担。 (想象一下,在jsonpickle
中修复了一个影响用户的错误,但是你还没有完成修复。如果你做得正常,他们所要做的就是升级{{1但是,如果您使用的是内部副本,他们必须下载jsonpickle
来源和您的来源,破解您的软件包,然后手动安装。)
有时,它仍然值得做。例如,非常受欢迎的requests
模块包含its own copy等urllib3
其他软件包。是的,它确实面临上述两种成本。但这也意味着jsonpickle
的每个版本都可以依赖request
的确切特定版本。由于urllib3
大量使用requests
很少使用的接口,甚至为某些已知错误提供了解决方法,因此这很有价值。
在你的情况下,这听起来不像是问题。您只需暂时需要urllib3
的最新版本,直到上游维护者将新版本上传到PyPI。问题不在于您不希望您的用户都拥有不同的版本;这是你不想强迫他们克隆回购并弄清楚如何手动安装它。幸运的是,jsonpickle
通过将大部分困难包含在一行来解决这个问题:
pip
这不是一个漂亮的解决方案,但它只是暂时的,对吗?
答案 1 :(得分:2)
通常不最好的想法是将一些依赖项与您的项目捆绑在一起。有些项目无论如何都会这样做,或者如果没有可用的系统包,则将其捆绑为替代方案。 (这主要在C项目中找到,而不是Python。)
你没有提到“最新”的含义。这是最新的pypi吗?
确保安装软件包的特定版本或大于基准版本的最佳方法是在setup.py requires部分中正确指定要求。在这里阅读更多关于需求的信息[1]。这种方式pip可以解决依赖关系,如果它在pypi中可用,它将是自动的。
[1] http://docs.python.org/2/distutils/setupscript.html#relationships-between-distributions-and-packages