Если я могу добавить к MarkM ответ , если вы хотите сохранить свою текущую структуру каталогов и все еще заставить ее работать, вы можете добавить setup.py
в свой root каталог, где вы можете использовать setuptools для создания пакета, который вы можете установить.
Если в вашем файле есть что-то вроде:
# setup.py
from setuptools import find_packages, setup
setup(
name='foo',
version=`1.0.0`,
packages=find_packages(),
entrypoints={
'console_scripts': [
'foo=src.main:main',
],
},
)
И тогда вы выполните pip install [--user] -e path/to/directory
, и вы получите «редактируемый пакет», который фактически будет символической ссылкой на пакет в вашем каталоге разработки, поэтому любые внесенные вами изменения не потребуют переустановки (если, конечно, вы не изменили структуру пакета или не добавили / удалили / отредактировали точки входа).
Это предполагает, что ваш src/main.py
имеет основную функцию.
Вам также понадобятся __init__.py
файлы в ваших каталогах "package", даже в Python3, так как в противном случае Python предполагает, что они являются пакетами пространства имен (не будем go подробно), и вызов find_packages()
не найдет их.
Это также позволит вашему относительному импорту работать. Абсолютный импорт будет работать только при вызове сценария из вашей точки входа, но не при вызове сценария непосредственно в каталоге разработки.