Python, модули импорта

1

Я изучаю python, и у меня проблема с импортом модулей/пакетов. Ну, я пытаюсь создать пакет, содержащий некоторые модули, но дело в том, что *.py файлы зависят друг от друга, вот код основной.py файл

import suite_syracuse.altitude as alt
import suite_syracuse.duree_vol as dure
N=int(input("Veuillez rentrer le premier terme de la suite ")) 
print("le numero de la vol est ",N,"\nson altitude est ",alt.Altitude(N))

когда я запускаю его, я получаю

Traceback (most recent call last):
File "./afficher_vol.py", line 2, in <module>
import suite_syracuse.altitude as alt
File "/home/daly/Workshop/Python/suite_syracuse/altitude.py", line 2, in <module>
import Next
ModuleNotFoundError: No module named 'Next'

вот архитектура пакета:

 Workshop/Python/suite_syracuse:
-rwxr-xr-x 1 **** ****  158 juil. 12 00:36 altitude.py                                                                                                          
-rwxr-xr-x 1 **** ****  151 juil. 12 00:27 duree_vol.py                                                                                                                                                   
-rw-r--r-- 1 **** ****    0 juil. 11 22:28 __init__.py                                                          
-rwxr-xr-x 1 **** ****  109 juil. 12 00:34 Next.py  
-drwxr-xr-x 2 **** **** 4096 juil. 12 00:37 __pycache__

и, наконец, файл heightitude.py:

#!/usr/bin/python3.7
import Next
def Altitude(N):
 L=[]
 while Next.suiv(N)!=1:
 L.append(Next.suiv(N)) 
 N=Next.suiv(N)
return max(L) 

и спасибо вам, ребята :)

  • 0
    Очень быстрое решение - просто поместить весь код в один файл.
  • 0
    с какой командой вы работаете и откуда вы ее выполняете?
Показать ещё 2 комментария
Теги:
python-3.x

2 ответа

1

я обнаружил, что ват ошибается, я должен поставить импорт, поскольку это пакет с

import suite_syracuse.Next 

чернильница

import Next

спасибо anyways :)

0

Импорт по умолчанию является абсолютным. Итак, import Next ищет модуль верхнего уровня с именем Next, и это не то, что вы хотите.

Но когда вы пытаетесь импортировать другой модуль в один и тот же пакет, вы обычно не хотите абсолютного импорта, вам нужен импорт относительно текущего пакета:

from . import Next

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

from suite_syracuse import Next

Или, конечно, вы можете это сделать:

import suite_syracuse.Next

... но тогда вам также придется изменить свой код, чтобы вызвать suite_syracuse.Next.suiv а не просто Next.suiv.


Все это объясняется в Модулях в официальном учебнике, но это как бы разбросано по всей главе. (Большая часть из них находится в Intra-Pack References, но вы не нашли бы этого или даже не поняли бы его, не прочитав сначала половину остальной части главы.)

Возможно, было бы более полезно прочитать PEP 328, предложение об изменении языка, которое добавило текущий синтаксис относительного импорта, который дает много информации о дизайне, а также о том, когда и почему вы хотите использовать абсолютный или относительный импорт.

  • 0
    понял, спасибо тебе :) я заблудился в официальной документации, не нашел то, что хочу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню