客户机和服务器部件结构Python应用程序(Structure Python application

2019-10-22 04:57发布

我有一个应用程序,它目前在以下文件夹结构:

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

什么是组织我的目录和执行代码部署的最佳方式是什么?

Answer 1:

你可能想有三个独立的软件包,而不是一个,甚至是你的第二个结构将导致包(蟒蛇蛋),它包含所有子模块,这将导致服务器代码被包装与客户端的代码。

你想要的是他们,分割成三个独立的包(即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.clientmyapp.server要求myapp.core ,所以如果/当你部署包到PyPI中(或其他)的用户可以简单地不要pip install myapp.client得到安装的客户端库到他们的系统,所有依赖取出。

你不一定要有一个bin中的任何地方。 您可以利用的entry_points的属性setup功能,让setuptools的为您创造的“二进制”在一个与操作系统无关的方式。 只需定义库中的主要功能(S),并让setuptools的为您创建可执行文件为您的用户。

最后,你可能想看看还有什么其他开源项目包装他们的图书馆做,下面是一些例子:

  • 烧瓶
  • Jinja2的
  • plone.app.discussion


文章来源: Structure Python application with client and server parts