包含客户端和服务器部分的结构 Python 应用程序

Structure Python application with client and server parts

我有一个应用程序当前位于以下文件夹结构中:

myapp/
  client/
  core/
  server/
  template_files/

它有一个服务器端和一个客户端组件,当我将代码部署给用户时,我不想也包含服务器端代码。 clientserver 都需要 core 代码才能 运行。

阅读一般 Python 项目结构后,我意识到我应该首先将结构更改为:

myapp/
  myapp/
    client/
    core/
    server/
      template_files/ (template is only needed by the server)
  bin/
  setup.py

构建目录和进行代码部署的最佳方式是什么?

你可能想要三个独立的包而不是一个,即使你的第二个结构也会产生一个包含所有子模块的包(python egg),这将导致服务器代码被打包使用客户端代码。

你想要的是将它们分成三个单独的包(即 myapp.clientmyapp.coremyapp.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.clientmyapp.server 定义依赖关系以要求 myapp.core,所以if/when 您将包部署到 pypi(或其他)上,您的用户只需执行 pip install myapp.client 即可将客户端库安装到他们的系统上,并获取所有依赖项。

你不一定要在任何地方都有 bin。您可以利用 setup 函数中的 entry_points 属性让设置工具以 OS 不可知的方式为您创建 "binary"。只需在您的库中定义主要函数,然后让 setuptools 为您的用户创建可执行文件。

最后,您可能想看看其他开源项目在打包他们的库方面做了什么,这里有一些例子: