假设您有一个客户端/服务器应用程序,比如一个Web服务器组件和一个qt gui。你如何布局你的python代码?
拥有服务器和客户端代码的子包(foo.server和foo.client)对我来说似乎是最好的方法,但是如果你不希望服务器代码随同一起发送,你如何处理你的distutils设置呢?客户代码?如果你使用setuptools(我宁愿不这样做),你如何创建单独的蛋?
答案 0 :(得分:0)
buildbot已选择创建单独的包(适用于master和slave)。在s ource control中,它们有三个文件夹:common,master和slave(加上文档)。
答案 1 :(得分:0)
我喜欢名称空间,所以是的。 foo.client和foo.server以及foo.common和foo.anythingelset可以分开使用。但这真的是品味问题。
我将它们作为单独的包发布,是的,我使用Distribute。
答案 2 :(得分:0)
现在我只使用setuptools(真的distribute),所以我在我的项目中使用该代码:
setup.py:
from setuptools import find_packages, setup
setup(
name = "foo.common",
version = __import__("foo.common", fromlist=[""]).__version__,
packages = find_packages(),
namespace_packages = ["foo"]
)
命名空间模块中的所有__init__.py文件:
# this is a namespace package
try:
import pkg_resources
pkg_resources.declare_namespace(__name__)
except ImportError:
import pkgutil
__path__ = pkgutil.extend_path(__path__, __name__)
真正的__init__.py文件看起来像:
VERSION = (0, 1, 0, "dev")
def get_version():
if VERSION[3] != "final":
return "%s.%s.%s%s" % (VERSION[0], VERSION[1], VERSION[2], VERSION[3])
else:
return "%s.%s.%s" % (VERSION[0], VERSION[1], VERSION[2])
__version__ = get_version()
答案 3 :(得分:-1)
拥有服务器和客户端代码的子包(foo.server和foo.client)对我来说似乎是最好的方法,
为什么呢?没有一个用户(开发人员除外)将使用双方。他们是完全分开的。
但是,如果您不希望服务器代码与客户端代码一起发货,那么如何处理distutils设置呢?
正。他们几乎完全无关。
有关指导,请查看其他客户端 - 服务器应用程序。
万维网,例如。
Apache HTTPD服务器和Firefox浏览器没有我能看到的任何通用代码。可能是一些底层库,但它们显然不是htttpd.client和httpd.server。他们显然是完全分开的。
Python中的Sendmail服务器和pop / imap库似乎完全没有任何共同点。
Python中的MySQL数据库服务器和MySQLDB接口似乎完全和完全分开,几乎没有任何共同点。
我无法在任何地方看到foo.server和foo.client的任何示例。也许你可以分享一个例子作为你问题的一部分,以帮助澄清你对这个问题的看法。