Модуль / функция импорта Python из подкаталога или из любого места - PullRequest
0 голосов
/ 08 марта 2019

Я хотел бы загрузить функцию / модуль с моим рабочим каталогом в качестве основного каталога проекта, но файл функции хранится ниже уровня подкаталога, поэтому обычный

from function_file import function_name

не работает.

Вот как выглядит каталог проекта:

└───project_main_directory
    │   .gitattributes
    │   .gitignore
    │   README.txt
    │
    ├───code
    │   ├───exploration
    │   └───scripts
    │       │   script1.py
    │       │   script2.py
    │       │   script3.py
    │       │
    │       └───functions
    │           │   function1.py
    │           │   function2.py
    │           └───__init__.py
    │
    ├───data
    │   └───example_data
    │           data.csv
    └───documents

Итак, я попытался импортировать функции через

import code.scripts.function.function1 from function1

, и этоне работаетЯ знаю, это потому, что другие подкаталоги не являются модулями, но я хочу спросить, есть ли что-нибудь в этом роде?

- РЕДАКТИРОВАТЬ Я работаю из файла .py в code / scripts / script1.py, норабочий каталог - каталог_проекта /

Ответы [ 4 ]

1 голос
/ 08 марта 2019

Добавьте пустой файл __init__.py в каждые подкаталоги, чтобы сделать их модулями.

.
├── code
│   ├── __init__.py
│   └── scripts
│       ├── __init__.py
│       └── script1.py
└── main.py

Тогда, если у вас есть функция с именем hello в code/scripts/script1.py, вы можете импортировать эту функцию следующим образом:

from code.scripts.script1 import hello
hello("yo")
0 голосов
/ 08 марта 2019

Во-первых, начиная с Python 3.3, __init__.py больше не требуется для определения каталогов как импортируемых пакетов Python. Во-вторых, вы можете использовать относительный импорт, который поможет вам в случае, если вы хотите сделать рефакторинг:

from code.scripts.script1 import function_name

Я помню, что я получил ту же ошибку некоторое время назад, проверьте этот вопрос и ответы на них для получения дополнительной информации, так что, надеюсь, это решит вашу проблему.

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

Чтобы импортировать функцию / модуль из другого файла Python, вы должны сделать что-то вроде ниже -

from code.scripts.functions.function1 import function1

Выше мы загружаем function1 из function1.py файл, который хранится в каталоге functions , который хранится в каталоге scripts и наконец, в каталоге код .

РЕДАКТИРОВАТЬ - так вы говорите, вы хотите загрузить функцию из function1.py в script1.py? В этом случае from .functions.function1 import function должно работать.

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

Если ваш текущий каталог - project_main_directory, вы можете использовать:

from code.scripts.functions.function1 import function1

Каталог вашего скрипта не имеет значения.Имеет значение только ваш текущий каталог (см. Верхнюю часть IDE)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...