Python - это модульная система
Python не зависит от файловой системы
Чтобы надежно загрузить код Python, поместите этот код в модуль, а этот модуль - в библиотеку Python.
Установленные модули всегда можно загрузить из пространства имен верхнего уровня с помощью import <name>
Официально доступен отличный пример проекта: https://github.com/pypa/sampleproject
По сути, вы можете создать структуру каталогов, например:
the_foo_project/
setup.py
bar.py # `import bar`
foo/
__init__.py # `import foo`
baz.py # `import foo.baz`
faz/ # `import foo.faz`
__init__.py
daz.py # `import foo.faz.daz` ... etc.
.
Обязательно укажите setuptools.setup()
в setup.py
,
официальный пример: https://github.com/pypa/sampleproject/blob/master/setup.py
В нашем случае мы, вероятно, хотим экспортировать bar.py
и foo/__init__.py
, мой краткий пример:
setup.py
#!/usr/bin/env python3
import setuptools
setuptools.setup(
...
py_modules=['bar'],
packages=['foo'],
...
entry_points={},
# Note, any changes to your setup.py, like adding to `packages`, or
# changing `entry_points` will require the module to be reinstalled;
# `python3 -m pip install --upgrade --editable ./the_foo_project
)
.
Теперь мы можем установить наш модуль в библиотеку python;
с помощью pip вы можете установить the_foo_project
в вашу библиотеку python в режиме редактирования,
так что мы можем работать над этим в режиме реального времени
python3 -m pip install --editable=./the_foo_project
# if you get a permission error, you can always use
# `pip ... --user` to install in your user python library
.
Теперь из любого контекста Python мы можем загрузить наши общие py_modules и пакеты
foo_script.py
#!/usr/bin/env python3
import bar
import foo
print(dir(bar))
print(dir(foo))