我有一个应用程序,它目前在以下文件夹结构:
myapp/
client/
core/
server/
template_files/
它有一个服务器端和客户端组件,当我的代码部署到用户,我不希望包括服务器端代码。 这两个client
和server
所需要的core
代码运行。
阅读有关一般Python项目结构,我知道我应该改变我的结构开始:
myapp/
myapp/
client/
core/
server/
template_files/ (template is only needed by the server)
bin/
setup.py
什么是组织我的目录和执行代码部署的最佳方式是什么?
你可能想有三个独立的软件包,而不是一个,甚至是你的第二个结构将导致包(蟒蛇蛋),它包含所有子模块,这将导致服务器代码被包装与客户端的代码。
你想要的是他们,分割成三个独立的包(即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
中的任何地方。 您可以利用的entry_points
的属性setup
功能,让setuptools的为您创造的“二进制”在一个与操作系统无关的方式。 只需定义库中的主要功能(S),并让setuptools的为您创建可执行文件为您的用户。
最后,你可能想看看还有什么其他开源项目包装他们的图书馆做,下面是一些例子:
- 烧瓶
- Jinja2的
- plone.app.discussion