2010-12-27 1 views
2

Предположим, что у вас есть клиент/серверное приложение, скажем, компонент веб-сервера и qt gui. Как вы планируете свой код на Python?Схема кода проекта клиента/сервера Python

  • Пакеты foo.server и foo.client?
  • Пакеты fooserver и fooclient, с импортом из foocommon?
  • Все вместе без четкого различия?

Имея подпакеты для сервера и клиентского кода (foo.server и foo.client), кажется, лучший подход ко мне, но потом, как вы справляетесь с вашей установкой Distutils, если вы не хотите, чтобы код сервера будет отправлен вместе с кодом клиента? Если вы используете setuptools (я бы предпочел), как вы создаете отдельные яйца?

ответ

-1

Имея подпакеты для сервера и код клиента (foo.server и foo.client) кажется лучшим подходом ко мне,

Почему? Ни один пользователь (кроме вас, разработчик) никогда не будет использовать обе стороны. Они полностью разделены.

но как же вы справляетесь с настройкой distutils, если вы не хотите, чтобы код сервера отправлялся вместе с кодом клиента?

Точно. Они почти полностью не связаны.

Для получения дополнительной информации обратитесь к другим приложениям клиент-сервер.

Всемирная паутина, например.

Apache HTTPD-сервер и браузер Firefox не имеют общего кода, который я могу видеть. Возможно, несколько базовых библиотек, но они явно не htttpd.client и httpd.server. Они явно совершенно разные.

Сервер Sendmail и библиотеки pop/imap на Python, по-видимому, полностью разделены почти не имеют ничего общего.

Сервер базы данных MySQL и интерфейс MySQLDB в Python, по-видимому, полностью и полностью разделены почти не имеют ничего общего.

Я не вижу никаких примеров foo.server и foo.client в любом месте. Возможно, вы можете поделиться примером как частью своего вопроса, чтобы помочь прояснить свое мышление по этому вопросу.

0

buildbot решил создать отдельные пакеты (для master и slave). В s ource control у них есть три папки: общий, главный и подчиненный (плюс документация).

0

Мне нравится пространства имен, так что да. foo.client и foo.server и foo.common и foo.anythingelsethatcanbeusedseparately. Но на самом деле все дело вкуса.

И я бы выпустил их как отдельные пакеты, и да, я бы использовал Distribute.

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()