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

时间:2015-03-10 02:27:56

标签: python directory-structure

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

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

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

1 个答案:

答案 0 :(得分:4)

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

你想要的是将它们分成三个单独的包(即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,因此,如果/部署了将软件包打包到pypi(或其他软件)上,您的用户可以简单地pip install myapp.client将客户端库安装到他们的系统上并获取所有依赖项。

您无需在任何地方拥有bin。您可以利用setup函数中的entry_points属性让setuptools以OS不可知的方式为您创建“二进制”。只需定义库中的主要功能,让setuptools为您的用户创建可执行文件。

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