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

标签 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

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

最佳答案

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

你想要的是将它们分成三个单独的包(即 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。您可以利用 entry_points setup 函数中的属性,让 setuptools 以与操作系统无关的方式为您创建“二进制文件”。只需在您的库中定义主要函数,然后让 setuptools 为您的用户创建可执行文件。

最后,您可能想看看其他开源项目在打包他们的库方面做了什么,这里有一些例子:

关于python - 使用客户端和服务器部分构建 Python 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28955165/

相关文章:

python - 使用 SqlAlchemy 在 Python 中检索外键映射对象

python - 无法运行 Chrome selenium "unknown error: cannot process extension #1"

flutter - 如何在 Flutter 按 View 模型中正确组织 API 调用?

python - 使用目录 - Python

python - 通过 WSGI 的 REMOTE_PORT

python - 使用 re.compile 根据文本文件中的未知单词的特征对其进行分类

python - 如何在 Python 中将字典键作为列表返回?

directory - 在线文件存储服务的目录设置

python - 每个域模型的目录或每层、角色的目录

java - Eclipse 无法识别 src/main/webapp 目录