Сценарий Python правильно выполняет каждое утверждение, но также возвращает ModuleNotFoundError - PullRequest
0 голосов
/ 10 апреля 2020

Я запускаю свой Python скрипт в Терминале на MacOS.

Исходный код script1.py:

# A first Python script
import sys              # Load a library module
print(sys.platform)         
print(2 ** 100)             # Raise 2 to a power
x = 'Spam!'
print(x * 8)                # String repetition

Вывод в интерактивном сеансе Python:

>>> import script1.py
darwin
1267650600228229401496703205376
Spam!Spam!Spam!Spam!Spam!Spam!Spam!Spam!
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'script1.py'; 'script1' is not a package

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

Что здесь происходит?

Ответы [ 2 ]

2 голосов
/ 10 апреля 2020
import script1.py

Интерпретатор думает, что вы пытаетесь импортировать модуль с именем py из пакета script1.

Теперь он может найти файл с именем script1 - это ваше файл называется script1.py. Так что он идет вперед и загружает его. И «загрузка» для python означает запуск операторов внутри файла. Так оно и есть. И вы получите свой вывод.

Затем интерпретатор понимает, что ожидал, что py будет модулем, поэтому script1 должен был быть пакетом (то есть каталогом с исходными файлами внутри него). Но script1 был просто обычным файлом. Следовательно это бросает эту ошибку.

При попытке импортировать модуль с именем script1.py вы должны использовать:

import script1

При попытке запустить файл с именем script1.py вы можете использовать:

python script.py
1 голос
/ 10 апреля 2020

Вы должны удалить .py в конце. При импорте sys вы также не пишете import sys.py. Смотрите также этот пост , в котором рассказывается, как импортировать ваши собственные скрипты в python.

...