Как написать оператор импорта, когда скрипты могут быть вызваны из разных мест? - PullRequest
0 голосов
/ 24 декабря 2018

Рассмотрим следующую структуру каталогов:

project/ 
    scripts/
        a1.py
        a2.py
    start.py

start.py зависит от a1.py, а a1.py в свою очередь использует функцию с именем some_func, присутствующую в a2.py.Более того, a1.py также является автономным скриптом и может вызываться независимо.Теперь это вызывает два случая:

Случай 1 : ( Автономный скрипт ) Я бы импортировал some_func следующим образом

from a2 import some_func

Дело 2 : ( Вызывается с start.py)

from scripts.a2 import some_func

Мой вопрос : Чтоявляется ли питонический способ объединения двух вариантов использования?

Возможное решение? : Это рекомендуется или нет?

if __name__ == "__main__":
    from a2 import some_func
elif __name__ == "start":
    from scripts.a2 import some_func

Примечание: я использую python 3.х

1 Ответ

0 голосов
/ 24 декабря 2018

Pythonic - это создание пакета из вашего кода, а затем использование ссылок внутри пакета в вашем коде: https://docs.python.org/3/tutorial/modules.html

from . import some_func  # from scripts in same folder
from .scripts import some_func  # from start.py

Также вы сможете использовать абсолютные пути (из имени пакета) после того, какупаковка вашего решения и его установка, например:

# this will work from anywhere
from mypackage.scripts import some_func
...