Импорт классов из другого пакета Python - PullRequest
0 голосов
/ 10 марта 2019

Мой каталог исходного кода (с именем my_dir) организован следующим образом:

my_dir
|
|-- pkg_1
|    |
|    |-- module_1.py
|    |-- module_2.py
|
|-- src.py

В module_1.py, я импортирую module_2.py на

import module_2

Но когда яimport module_1 in src.py by

import module_1

Возникает ошибка, поскольку оператор import module_2 in module_1.py действует так, как если бы мой рабочий каталог был pkg_1 вместо my_dir.

Как это можно исправить?

Ответы [ 3 ]

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

Попробуйте это:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os, sys;

# get path to this file.
path_this_file = os.path.dirname(os.path.abspath(__file__));
# add path to import files.
sys.path.insert(0, path_this_file + "/pkg_1");

import module_1, module_2;
0 голосов
/ 10 марта 2019

Это причина недоразумения:

Возникает ошибка, поскольку оператор import module_2 в module_1.py действует так, как если бы мой рабочий каталог был pkg_1 вместо my_dir.

Прежде всего, когда вы импортируете пакет, код в этом пакете не выполняется в другом рабочем каталоге.

Вторая ошибка в том, что рабочий каталог вообще не актуален, даже если он изменился.

Код Python организован в пакеты и модули. Интерпретатор ищет пакеты и модули в пути Python.

В показанной структуре my_dir будет в пути Python, если вы запустите python src.py. Тогда pkg_1 - это пакет, тогда как module_1 и module_2 - это модули. Самый простой способ импортировать module_2 - использовать абсолютный импорт:

import pkg_1.module_2

В качестве альтернативы, из другого модуля в pkg_1 вы можете использовать относительный импорт :

from . import module_2
0 голосов
/ 10 марта 2019

в module_1.py импортировать как from . import module_2 и в src.py импортировать модуль_1 как from pkg_1 import module_1

...