Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/120: Рейтинг темы: голосов - 120, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 23.03.2020
Сообщений: 3

ImportError: attempted relative import with no known parent package

24.03.2020, 11:20. Показов 22493. Ответов 9

Студворк — интернет-сервис помощи студентам
привет!

у меня есть следующая структура:

project
---__init__.py
---package
-------__init__.py
-------module.py
---test
-------__init__.py
-------test.py

я пытаюсь импортировать функцию func из module.py в test.py:

from ..package.module import func

но получаю ошибку ImportError: attempted relative import with no known parent package.

что я делаю не так? нашел решение через sys.path, но хочу понять, как правильно в случае с двумя точками
видел здесь такую же тему, но там нет ответа
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.03.2020, 11:20
Ответы с готовыми решениями:

Ошибка attempted relative import with no known parent package
Здравствуйте, выдается ошибка attempted relative import with no known parent package, почему? Я очень начинающий но мне надо срочно...

ImportError: attempted relative import with no known parent package
вот код в файле urls.py в самом проекте, from django.contrib import admin from django.urls import path from .views import hello ...

ImportError: attempted relative import beyond top-level package
Здравствуйте! Подскажите, пожалуйста, как правильно импортировать файл в другой файл,если они в разных папках и на одном уровне в...

9
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
24.03.2020, 15:11
laji, Папка с проектом не должна содержать __init__.py, если это не модуль который предназначен только для импорта. Так что-же это у вас проект или модуль?

Добавлено через 24 минуты
Пример использования относительного импорта:

Структура проекта:
PROJECT
----main.py
Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
# -*- mode: python ; file: main.py ; encoding: utf-8 -*-
 
from MODULE.MY_MODULES import *
 
 
print(issubclass(Module1Class1, Module2Class1))  # False
print(issubclass(Module3Class1, Module1Class1))  # True
print(issubclass(Module3Class2, Module2Class1))  # True

----MODULE
--------__init__.py
Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
# -*- mode: python ; file: __init__.py ; encoding: utf-8 -*-
 
from .module1 import *
from .MY_MODULES.module2 import *
from .MY_MODULES.module3 import *

--------module1.py
Кликните здесь для просмотра всего текста

Python
1
2
3
4
# -*- mode: python ; file: module1.py ; encoding: utf-8 -*-
 
class Module1Class1:
    pass

--------MY_MODULES
------------__init__.py
Кликните здесь для просмотра всего текста

Python
1
2
3
4
# -*- mode: python ; file: __init__.py ; encoding: utf-8 -*-
 
from .module2 import *
from .module3 import *

------------module2.py
Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
# -*- mode: python ; file: module2.py ; encoding: utf-8 -*-
 
from ..module1 import Module1Class1
 
class Module2Class1(Module1Class1):
    pass

------------module3.py
Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
9
10
# -*- mode: python ; file: module3.py ; encoding: utf-8 -*-
 
from .module2 import Module2Class1
from ..module1 import Module1Class1
 
class Module3Class1(Module1Class1):
    pass
 
class Module3Class2(Module2Class1):
    pass
0
0 / 0 / 0
Регистрация: 23.03.2020
Сообщений: 3
24.03.2020, 15:29  [ТС]
в project содержится config.py, который тоже импортируется, поэтому там присутствует __init__.py
я пытался не загромождать структуру проекта, поэтому не стал указывать наличие config.py, но посчитал, что __init__.py возможно имеет какое-то влияние на импорт, поэтому указал его наличие
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
24.03.2020, 16:39
laji, копирование из родительских директорий нужно в крайних случаях: когда модуль разбит на кучу подмодулей, и в подмодулях присутствуют одинаковые классы, объекты или переменные, тогда все это выносят в основной модуль и просто импортируют оттуда.
0
0 / 0 / 0
Регистрация: 23.03.2020
Сообщений: 3
24.03.2020, 17:27  [ТС]
я б рад обойтись без импорта из родительской директории, но нужно)

и хотелось бы разобраться, что я не так делаю с этими точками. крайний случай или нет, но у людей это как-то работает

p.s. сорри за оффтоп, но как вы делаете обращение? или это просто жирный шрифт? а то вы отвечаете мне, а я вникуда
0
5 / 5 / 0
Регистрация: 25.09.2017
Сообщений: 569
26.09.2020, 16:17
Если название папки начинается с точки, как импортировать?

Вот пример:

app/.heroku/python/module.py


app/app1/script.py:

Python
1
from ..heroku.python import module
Корректно?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
26.09.2020, 17:16
В Python нельзя использовать каталог с точкой в имени для пакетов.
0
5 / 5 / 0
Регистрация: 25.09.2017
Сообщений: 569
26.09.2020, 19:08
Цитата Сообщение от Garry Galler Посмотреть сообщение
В Python нельзя использовать каталог с точкой в имени для пакетов.
Тут случай такой, что локальные машины на heroku так устроены, что исполняемые файлы ищут по вот этим путям:

(b'/app/.heroku/python/bin/SOME.EXE',
b'/usr/local/bin/SOME.EXE',
b'/usr/bin/SOME.EXE',
b'/bin/SOME.EXE')

Но, так как app --- это папка расположения проекта, то приходится создавать исполняемые файлы в папках, которые являются подкаталогами app.

Я работаю с django. Решил таким образом:

script.py:

Python
1
2
3
4
5
6
from diehard.settings import BASE_DIR #тут импортируется абс. путь до проекта
import os
import sys
sys.path.insert(0, os.path.join(BASE_DIR, '.heroku\\python\\bin'))# сюда добавляется каталог, откуда импортируется нужный мне модуль:
 
import module
Вот так, развертывание приложения проходит нормально.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
26.09.2020, 19:48
Цитата Сообщение от Alex_py Посмотреть сообщение
Тут случай такой, что локальные машины на heroku так устроены, что исполняемые файлы ищут по вот этим путям:
Тогда вы путаете поиск путей расположения модулей (которые могут быть любыми) и импортом файла из пакета.
Файл\каталог в пакете не могут иметь имен с точкой. Потому что имя файла или каталога в пакете, чтобы быть импортируемым, должно быть валидным Python идентификатором.
1
5 / 5 / 0
Регистрация: 25.09.2017
Сообщений: 569
26.09.2020, 20:19
Я понял, про что вы говорите. В проекте модуль вызывает exe из этой же папки где и сам расположен. Этот модуль нужно импортировать в контроллер. Модуль не может быть в другой папке (например, где и контроллер), а только в той, где и исполняемый файл. Так уж требует сам исполняемый файл., потому что если его вызывать модулем, который не там где исполняемый файл, то программа работает некорректно. Уже проверял.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.09.2020, 20:19
Помогаю со студенческими работами здесь

ImportError: cannot import name 'x' from 'main'
Добрый день. Подскажите пожалуйста как избавить от этой ошибки. Ошибка выскакивает если я пытаюсь запустить код и из test.py и из...

ImportError: cannot import name 'Chat' from 'telegram'
Привет, ребята, пишу бота, но выдаёт ошибку, не могу понять в чём дело. (Я новичок). Сам код: from telegram.ext import Updater,...

ImportError: cannot import name 'deepcopy' from 'copy'
Помогите пожалуйста!!! import turtle Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> ...

ImportError: cannot import name 'is_divide_by' from 'solution'
def isDivideBy(number, a, b): if number // a and b: print(True) else: print(False) ...

ImportError: cannot import name 'PROT_READ' from 'mmap'
Всем привет! Скачал с гитхаба очень нужный скрипт - декриптор прошивок IPMI. В описании к скрипту указано как запускать скрипт: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru