2015-03-10 6 views
1

У меня есть приложение, которое в настоящее время в следующей структуре папок:Структура с клиентскими и серверными частями

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 

Что лучшим способом структурировать свои каталоги и сделать развертывание коды?

ответ

3

Возможно, у вас есть три отдельных пакета вместо одной, даже ваша вторая структура приведет к пакету (яйцо-питон), содержащему все подмодули, которые приведут к тому, что код сервера будет упакован с кодом клиента.

Что вы хотите, чтобы разделить их на три отдельных пакетов (т.е. 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 создавать «двоичные» для вас агностики OS. Просто определите основные функции внутри вашей библиотеки и дайте setuptools создать для вас исполняемый файл для ваших пользователей.

Наконец, вы можете взглянуть на то, что другие проекты с открытым исходным кодом сделали для упаковки своей библиотеки, вот несколько примеров:

+0

Вы сказали, что вы предложили [неявные пакеты пространства имен] (https://www.python.org/dev/peps/pep-0420/) (Кстати: в каких каталогах мне нужно создать '_ _init __. py'?)? Если нет: как бы вы ссылались (импортировать) модули из пакета 'myapp.core' из модулей, проживающих с пакетом' myapp.server'? Нужно ли создавать [виртуальную среду] (https://virtualenv.pypa.io/en/stable/), чтобы заставить ее работать? –

+1

@ patryk.beza да, вы должны установить пакет в какую-то среду, виртуальная среда является обычной рекомендацией, потому что она предлагает некоторую форму изоляции от остальной системы. Еще один вариант - сделать это на [уровне пользователя] (https://stackoverflow.com/questions/7143077/how-can-i-install-packages-in-my-home-folder-with-pip) или наименее рекомендуется, как root на системном уровне. – metatoaster