Относительный импорт Python в папке Brother / Sister для AWS CodeBuild - PullRequest
1 голос
/ 22 марта 2019

Я строю на AWS CodeBuild с использованием Python 2.7, но я считаю, что это гораздо более общая проблема импорта python. У меня есть настройки каталога, показанные ниже. Я использую test.py внутри папки test. Я хотел бы импортировать зависимость mainScript.py как часть этого тестирования. Тем не менее, я не могу правильно понять относительные зависимости, и у меня возникают большие трудности с импортом mainScript в тестовой папке. Ниже приведен макет моей папки каталога

main
    src
       mainScript.py
    test
       test.py

Если, например, мои настройки каталога были похожи на

main
    test
       test.py
       mainScript.py

Я мог бы сделать мой импорт следующим образом

from mainScript import *

Я подтвердил эту работу. Но мне нравится в его собственной папке src. Я пробовал все это. Это следующие относительные попытки, которые я пробовал.

from ..src/mainScript import * #SyntaxError: invalid syntax
from ..src.mainScript import * #ValueError: attempted relative import beyond top-level package
from mainScript import * #ModuleNotFoundError: No module named 'mainScript'
from src.mainScript import * #ModuleNotFoundError: No module named 'src'
from src/mainScript import * #SyntaxError: invalid syntax   

Я немного боролся, и я не мог найти вопрос с кем-то, спрашивающим о доступе к скрипту папки «брат / сестра». Спасибо заранее за вашу помощь.

Ответы [ 2 ]

2 голосов
/ 22 марта 2019

Python рассматривает каталоги как пакеты, если они содержат файл __init__.py. Обновление вашей структуры до следующего должно помочь:

    __init__.py
    src
       __init__.py
       mainScript.py
    test
       __init__.py
       test.py

Теперь из test.py вы можете сделать from ..src import *. Подробнее о init .py вы можете посмотреть здесь: Для чего нужен __init__.py?

0 голосов
/ 25 марта 2019

В дополнение к добавлению файлов init .py.В итоге мне пришлось запустить python с аргументом -m в моей команде, который был добавлен в Python 2.4.

PEP 338

В Python 2.4 добавлен ключ командной строки -m, позволяющий расположить модули, используя пространство имен модуля Python для выполнения в виде сценариев.Мотивирующими примерами были стандартные библиотечные модули, такие как pdb и profile, и реализация Python 2.4 отлично подходит для этой ограниченной цели.

Итак, команда для запуска из верхнего каталога:

python -m test.test

Кажется, это работает и дает правильное пространство имен.Затем в файле test.py вы импортируете mainScript следующим образом

from src.mainScript import *
...