У меня есть проект a
с несколькими версиями main#.py
, поэтому я организовал их в каталог с именем run
.Я обычно запускаю проект a
из ./a
, вызывая python run/main1.py
.Поскольку main1.py
включает импорт за пределы пакета верхнего уровня, мне нужно указать sys.path.insert(0, "./")
в main1.py
.
Теперь я создал проект b
, который импортирует main1.py
из a
.От b\main.py
, как мне заставить main1.py
импортировать a/utils.py
конкретно?
Требования:
Проект a
- это проект, над которым я долго работалназад, поэтому я хотел бы внести ограниченные изменения только в его заголовки.Я бы хотел, чтобы python run/main1.py
работал так, как работает в настоящее время.
Я могу перемещать проекты между разными компьютерами, поэтому main1.py
необходимо импортировать utils.py
относительно себя.(т.е. без импорта с абсолютным путем)
Я бы хотел, чтобы решение было масштабируемым.b
потребуется импортировать модули из нескольких других проектов, структурированных как a
.Я чувствую, что расширение системной переменной PATH может просто испортить ситуацию.Есть ли более точное решение?
Файлы моих проектов выглядят следующим образом:
в a/run/main1.py
:
import sys
sys.path.insert(0, "./")
from utils import hello # Anyway to specify this to be ../utils.py ?
hello()
в a/utils.py
:
def hello():
print('hello from a')
в b/main.py
:
import sys
sys.path.append("../")
from a.run import main1
import utils
utils.hello()
in b/utils.py
:
def hello():
print('hello from b')
Это текущий результат.Я хотел бы, чтобы в первой строке было напечатано «привет от»:
>>> python run/main1.py:
hello from a
>>> cd ../b
>>> python run/main.py:
hello from b (we want this to be "hello from a")
hello from b