Почему я получаю следующую ошибку в Python "ImportError: Нет модуля с именем py"?

Я новичок в Python, так что медведь со мной:)

Я создал файл test.py с содержимым следующим образом:

test.py
import sys
print sys.platform
print 2 ** 100

Затем я запустил файл import test.py в интерпретаторе, чтобы следовать примеру моей книги. Когда я это сделаю, я получаю вывод с ошибкой импорта в конце.

win32
1267650600228229401496703205376
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named py

Почему я получаю эту ошибку и как ее исправить? Спасибо!

Ответы

Ответ 1

Вместо:

import test.py

просто напишите:

import test

Это предполагает, что test.py находится в том же каталоге, что и файл, который импортирует его.

Ответ 2

Эта странно выглядящая ошибка является результатом того, как Python импортирует модули.

Python видит:

import test.py

Python думает (упрощенный бит):

тест модуля импорта.

  • найдите test.py в пути поиска модуля
  • выполнить test.py(где вы получите свой результат)
  • импортировать 'test' как имя в текущее пространство имен

import test.py

  • поиск файла test/py.py
  • throw ImportError (нет модуля с именем 'py').

Поскольку python допускает имена точечных модулей, он просто думает, что у вас есть подмодуль с именем py в модуле test и попытался найти его. Он не подозревает, что вы пытаетесь импортировать файл.

Ответ 3

Вы не указываете расширение при импорте. Просто выполните:

import test

Ответ 4

Как уже упоминалось, вам не нужно помещать расширение файла в оператор импорта. Рекомендуемое чтение - это Раздел модулей в учебнике Python.

Для получения дополнительной информации об ошибке интерпретатор считает, что вы пытаетесь импортировать модуль с именем py из пакета test, поскольку точка указывает на инкапсуляцию. Поскольку такой модуль не существует (и test не является даже пакетом!), Он вызывает эту ошибку.

Как указано в более подробной документации по инструкции импорта, он все еще выполняет все инструкции в модуле test перед попыткой для импорта модуля py, поэтому вы получаете распечатанные значения.