用客户机和服务器部件构造Python应用程序

用客户机和服务器部件构造Python应用程序,python,directory-structure,Python,Directory Structure,我有一个应用程序当前处于以下文件夹结构中: myapp/ client/ core/ server/ template_files/ 它有一个服务器端和一个客户端组件,当我将代码部署给用户时,我不想同时包含服务器端代码。客户端和服务器都需要运行核心代码 在阅读有关一般Python项目结构的内容时,我意识到我应该首先将结构更改为: myapp/ myapp/ client/ core/ server/ template_files/ (te

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

myapp/
  client/
  core/
  server/
  template_files/
它有一个服务器端和一个客户端组件,当我将代码部署给用户时,我不想同时包含服务器端代码。
客户端
服务器
都需要运行
核心
代码

在阅读有关一般Python项目结构的内容时,我意识到我应该首先将结构更改为:

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

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

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

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

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

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


你所建议的方法被称为(顺便问一下:我需要在哪些目录中创建
\uuu init\uuuu.py
?)?如果不是:您将如何从
myapp.core
ing
myapp.server
package中的模块引用(导入)模块?我必须创建才能使其工作吗?@patryk.beza是的,您必须将软件包安装到某些环境中,通常建议使用虚拟环境,因为它提供了与系统其余部分的某种形式的隔离。另一种选择是在系统级以root用户身份(或者至少推荐这样做)。