Python客户端/服务器项目代码布局

时间:2010-12-27 20:29:39

标签: python distutils

假设您有一个客户端/服务器应用程序,比如一个Web服务器组件和一个qt gui。你如何布局你的python代码?

  • 包foo.server和foo.client?
  • 包装fooserver和fooclient,同时从foocommon导入?
  • 一切都没有明确的区别?

拥有服务器和客户端代码的子包(foo.server和foo.client)对我来说似乎是最好的方法,但是如果你不希望服务器代码随同一起发送,你如何处理你的distutils设置呢?客户代码?如果你使用setuptools(我宁愿不这样做),你如何创建单独的蛋?

4 个答案:

答案 0 :(得分:0)

buildbot已选择创建单独的包(适用于masterslave)。在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的任何示例。也许你可以分享一个例子作为你问题的一部分,以帮助澄清你对这个问题的看法。