импортировать файл из другого места - python - PullRequest
0 голосов
/ 28 мая 2018

Есть две папки, каждая из которых содержит файл Python.Например: first_folder содержит a.py и second_folder содержит b.py

Я попытался импортировать b.py в a.py, но не получил ошибку импорта.

ImportError: Нет модуляпо имени b

Пожалуйста, помогите мне решить эту проблему.Я также попытался создать пустой init .py в обеих папках, но это не сработало.

Структура папки:

/ home / user/ scripts /

 |
 |--------python_scripts
 |          |
 |          |
 |          |------- a.py
 |
 |--------lib
           |
           |-------b.py

Ответы [ 3 ]

0 голосов
/ 28 мая 2018

Python import будет искать модули (.py файлы) в пути к Python.Вы можете увидеть, что находится в пути к Python, в переменной sys.path.

По умолчанию sys.path будет содержать каталог, в котором находится скрипт, который вы запустили.Он также будет включать в себя все, что определено в переменной окружения PYTHONPATH.

Итак, если у вас есть две директории с файлами .py, вы можете поместить оба в путь Python, или выможете убедиться, что все ваши исходные файлы находятся под одним и тем же путем.

Опция 1

(этот синтаксис зависит от вашей оболочки, здесь он для окон)

set PYTHONPATH=%PYTHONPATH%;\path\to\second_folder

python \path\to\first_folder\a.py

Затем вы можете просто import b.

Вариант 2

Создать пустой __init__.py в обоих каталогах и run.py в каталоге над ними, поэтому у вас есть:

root_dir
    run.py
    first_folder
        __init__.py
        a.py
    sedond_folder
        __init__.py
        b.py

Сделайте run.py вашей точкой входа (запустите python run.py), и затем вы сможете импортировать любые модули из любого другого модуля, используя их полные имена модулей:

import first_folder.a
import second_folder.b
0 голосов
/ 28 мая 2018

Предположим, у вас есть такие файлы

.
├── first_folder
│   └── a.py
└── second_folder
    └── b.py

Вы можете использовать abs путь для импорта a.py в качестве модуля в b.py

import importlib.util

spec = importlib.util.spec_from_file_location('a', 'path/to/first_folder/a.py')

foo = importlib.util.module_from_spec(spec)

spec.loader.exec_module(foo)

print(dir(foo))

Есть еще один удобный способзагрузить b.py

$ cd path / to / second_folder

$ ln -s path/to/first_folder ./first_folder

и импортировать a.py как обычный модуль Python

import a from first_folder
0 голосов
/ 28 мая 2018

Если файлы находятся в одном каталоге, введите

Import .other_file
...