我有一个当前位于以下文件夹结构中的应用程序:
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
构建目录和进行代码部署的最佳方式是什么?
最佳答案
你可能想要三个独立的包而不是一个,即使你的第二个结构也会产生一个包含所有子模块的包(python egg),这将导致服务器代码与客户端代码打包在一起。
你想要的是将它们分成三个单独的包(即 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
。您可以利用 entry_points
setup
函数中的属性,让 setuptools 以与操作系统无关的方式为您创建“二进制文件”。只需在您的库中定义主要函数,然后让 setuptools 为您的用户创建可执行文件。
最后,您可能想看看其他开源项目在打包他们的库方面做了什么,这里有一些例子:
关于python - 使用客户端和服务器部分构建 Python 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28955165/