Решение состоит в том, чтобы иметь два отдельных проекта: основной проект (обычно приложение) и подпроект (обычно библиотека).Основное приложение имеет зависимость от библиотеки.
Древовидная структура и setup.py
Основной проект может иметь следующую структуру:
your_app/
|-- setup.py
ˋ-- src/
ˋ-- your_app/
|-- __init__.py
|-- module1.py
ˋ-- ...
setup.py
вашего приложения может быть:
from setuptools import find_packages
from setuptools import setup
setup(
name='Your-App',
version='0.1.0',
install_requires=['Your-Library'],
packages=find_packages('src'),
package_dir={'': 'src'},
url='https://github.com/your-name/your_app',
license='MIT',
author='Your NAME',
author_email='your@email.com',
description='Your main project'
)
Вы можете заметить, что:
- Имя вашего приложения может немного отличаться от имени вашего пакета;
- Этот пакет зависит от "Your-Library", определенной ниже;
- Вы можете поместить свой источник в каталог
src
, но это необязательно.У многих проектов их нет.
Подпроект может иметь следующую структуру:
your_library/
|-- setup.py
ˋ-- src/
ˋ-- your_library/
|-- __init__.py
|-- lib1.py
ˋ-- ...
setup
вашей библиотеки может быть:
from setuptools import find_packages
from setuptools import setup
setup(
name='Your-Library',
version='0.1.0',
packages=find_packages('src'),
package_dir={'': 'src'},
url='https://github.com/your-name/your_library',
license='MIT',
author='Your NAME',
author_email='your@email.com',
description='Your sub-project'
)
Собираем все вместе
Создайте virtualenv для вашего приложения и активируйте его
Перейдите в каталог your_library/
и выполните:
pip install -e .
Затем,перейдите в каталог your_app/
и запустите:
pip install -e .
Теперь вы готовы к коду.Веселитесь!
См. Руководство автостопом по Python : «Структурирование вашего проекта».