用客户端和服务器部分构造Python应用程序 - python

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

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大神给出的解决方案

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

您想要将它们分成三个独立的程序包(即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.pymyapp.client中定义myapp.server的依赖项以要求myapp.core,因此,如果/在将软件包部署到pypi(或其他)上时,用户可以简单地pip install myapp.client将客户端库安装到其系统上,并提取所有依赖项。

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

最后,您可能想看看其他开源项目在打包其库方面做了什么,下面是一些示例:

Flask
Jinja2
plone.app.discussion