我有一个庞大的Python 3.7+项目,目前正在将其拆分为多个可单独安装的软件包。我最初的想法是拥有一个包含多个软件包的Git存储库,每个软件包都有自己的setup.py。但是,在Google上进行一些研究时,我发现有人建议每个软件包使用一个存储库:(例如Python - setuptools - working on two dependent packages (in a single repo?))。但是,没有人提供为什么他们喜欢这种结构的很好的解释。
所以,我的问题是:
此外,我知道(如果我错了,请纠正我)setuptools现在允许从GitHub存储库安装依赖项,即使setup.py的GitHub URL不在存储库的根目录。
答案 0 :(得分:1)
这里涵盖了一个方面 https://pip.readthedocs.io/en/stable/reference/pip_install/#vcs-support
特别是,如果setup.py不在根目录中,则必须在pip install命令中指定用于查找setup.py的子目录。
因此,如果您的存储库布局为:
- pkg_dir /
- setup.py#软件包pkg的setup.py
- some_module.py
- other_dir /
- some_file
- some_other_file
您需要使用pip install -e vcs + protocol:// repo_url /#egg = pkg&subdirectory = pkg_dir。
答案 1 :(得分:1)
“最佳”方法?这是一个见解,不是SO的范畴。但是,有两个创建单独的程序包的理由:
我同意@boriska的观点,即“单一包”项目结构是值得努力争取的维护方便性。但是,不是(这只是我的观点,我会因为表达这一观点而感到不满),以牺牲大量从未安装过的小型软件包来包装公共软件包索引为代价。
答案 2 :(得分:0)
我自己正在研究同一问题。 PyPa文档建议在https://github.com/pypa/sample-namespace-packages
的'native'子目录中描述的布局我发现以下所述的单个软件包结构非常有用,请参见有关测试“已安装”版本的讨论。 https://blog.ionelmc.ro/2014/05/25/python-packaging/#the-structure 我认为这可以扩展到多个软件包。将在我了解更多信息后发布。