#python #python-3.x #object #pip
#python #python-3.x #объект #pip
Вопрос:
У меня есть exmple.py
скрипт, который пытается создать объект из модуля, который находится в __main__.py
другом каталоге, как показано здесь:
├─ /enpy
│ ├─ __init__.py
│ └─ __main__.py
│
└─/tests
├─ /filetest
│ └─ train.json
│
└─ example.py
main.py имеет один класс под названием Enpy, и он начинается так и имеет множество различных функций:
MAIN.PY
# Dependancies
import json
import csv
class Enpy:
# Global Variables
dataset = None
# initialize class
def __init__(self, file):
self.readDataset(file)
# Functions
def readDataset(self, file):
with open(file) as f:
self.dataset = json.load(f)
Тогда я не уверен, импортируйте библиотеку enpy и используйте класс в main.py . Итак, на данный момент в example.py У меня есть
EXAMPLE.PY
import sys
sys.path.insert(1, '../enpy')
from enpy import *
# TESTING
# 1. Creating Enpy Object
enpyObj = enpy.Enpy('./filetest/train.json')
Я получаю сообщение об ошибке при попытке запустить мой example.py где я импортирую свою локальную библиотеку в папку ./enpy
enpyObj = enpy.Enpy(‘./filetest/train.json’)
Ошибка имени: имя ‘enpy’ не определено
Я знаю, что есть много вопросов по этому поводу, но не очень понятно, как импортировать классы. Спасибо!
Комментарии:
1. Используется
importlib.resources
для чтения файлов данных (в вашем случае файла Json). Нет необходимости вsys.path
модификациях. Вызовите свой код из каталога, содержащего ваш пакет верхнего уровня (enpy
):python tests/example.py
.
Ответ №1:
Вы можете импортировать enpy
, используя абсолютный путь. Таким образом, вы можете использовать SourceFileLoader
для импорта из абсолютного пути:
from importlib.machinery import SourceFileLoader
enpy = SourceFileLoader("module.name", "/path/to/enpy/__init__.py").load_module()
enpyObj = enpy.Enpy('./filetest/train.json')
Комментарии:
1. Это не сработало, в том числе потому, что оно отсутствует
load_module(fullname="enpy")
. Я обнаружил, что, работаяexample.py
в главном каталоге, переименуйте__main__.py
, напримерEnpy.py
, в, а затем измените наfrom enpy import Enpy
иenpyObj = Enpy.Enpy('./tests/filetest/train.json')
, а также все мои другие пути: работает.