使用客户端和服务器部分构建 Python 应用程序

mch*_*gun 3 python directory-structure

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

myapp/
  client/
  core/
  server/
  template_files/
Run Code Online (Sandbox Code Playgroud)

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

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

myapp/
  myapp/
    client/
    core/
    server/
      template_files/ (template is only needed by the server)
  bin/
  setup.py
Run Code Online (Sandbox Code Playgroud)

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

met*_*ter 7

您可能希望拥有三个独立的包而不是一个,即使您的第二个结构也会产生一个包含所有子模块的包(python egg),这将导致服务器代码与客户端代码打包在一起。

您想要的是将它们分成三个单独的包(即myapp.client,myapp.coremyapp.server),并且它们将具有单独的目录结构,因此实际上您将拥有类似

myapp.client/
  myapp/
    client/
  setup.py
myapp.core/
  myapp/
    core/
  setup.py
myapp.server/
  myapp/
    server/
      template_files/
  setup.py
Run Code Online (Sandbox Code Playgroud)

由于它们都将成为正确的 python 包,您可以在setup.pyformyapp.clientmyapp.serverto require 中定义依赖项myapp.core,因此如果/当您将包部署到 pypi(或其他)上时,您的用户可以简单地pip install myapp.client将客户端库安装到他们的系统上已获取依赖项。

你不一定非得bin在任何地方都有。您可以利用函数中的entry_points属性,setup让 setuptools 以与操作系统无关的方式为您创建“二进制文件”。只需在您的库中定义主要函数,然后让 setuptools 为您的用户创建可执行文件。

最后,您可能想看看其他开源项目为打包他们的库所做的工作,以下是一些示例: