我有一个当前处于以下文件夹结构的应用程序:
myapp/
client/
core/
server/
template_files/
它有一个服务器端和一个客户端组件,当我将代码部署到用户时,我也不想包含服务器端代码。 client
和server
都需要运行core
代码。
阅读一般的Python项目结构,我意识到我应该从将结构改为:
开始myapp/
myapp/
client/
core/
server/
template_files/ (template is only needed by the server)
bin/
setup.py
构建目录和进行代码部署的最佳方法是什么?
答案 0 :(得分:4)
你可能希望有三个独立的包而不是一个,即使你的第二个结构也会产生一个包(python egg),它包含所有子模块,这些子模块将导致服务器代码与客户端代码一起打包。 / p>
你想要的是将它们分成三个单独的包(即myapp.client
,myapp.core
和myapp.server
),它们将具有分离的目录结构,所以实际上你会有一些东西像
myapp.client/
myapp/
client/
setup.py
myapp.core/
myapp/
core/
setup.py
myapp.server/
myapp/
server/
template_files/
setup.py
由于它们都将成为合适的python包,因此您可以在setup.py
myapp.client
和myapp.server
中定义依赖关系来定义myapp.core
,因此,如果/部署了将软件包打包到pypi(或其他软件)上,您的用户可以简单地pip install myapp.client
将客户端库安装到他们的系统上并获取所有依赖项。
您无需在任何地方拥有bin
。您可以利用setup
函数中的entry_points
属性让setuptools以OS不可知的方式为您创建“二进制”。只需定义库中的主要功能,让setuptools为您的用户创建可执行文件。
最后,您可能想了解其他开源项目为打包库所做的工作,以下是一些示例: