Nano Hash - криптовалюты, майнинг, программирование

Python IDLE openpyxl – AttributeError при запуске скрипта

Я пытаюсь использовать openpyxl из скрипта.

При использовании openpyxl из оболочки IDLE все идет хорошо:

Python 2.7.9 |Anaconda 2.2.0 (32-bit)| (default, Dec 18 2014, 17:00:07) [MSC    v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> import openpyxl as px
>>> wb = px.workbook.Workbook()
>>> 

и я могу использовать все остальные функции openpyxl.

Однако, помещая это в скрипт...:

import openpyxl as px
wb = px.workbook.Workbook()

(обратите внимание, что скрипт вызывается/сохраняется как «openpyxl_2.py»)

и запуская скрипт в IDLE, я получаю следующую ошибку:

Python 2.7.9 |Anaconda 2.2.0 (32-bit)| (default, Dec 18 2014, 17:00:07) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 

Traceback (most recent call last):
  File "\\verdc01\userdocs$\wkvdleeden\My Documents\Python excel\openpyxl_2.py", line 1, in <module>
    import openpyxl as px
  File "\\verdc01\userdocs$\wkvdleeden\My Documents\Python excel\openpyxl.py", line 8, in <module>
AttributeError: 'module' object has no attribute 'workbook'
>>>

Использование Python 2.7.9 и openpyxl 2.3.2 (хорошо установленный с pip).

Вопрос:

Как получается, что при запуске скрипта я получаю указанную выше ошибку? Как заставить его работать?

Post scriptum - обратите внимание, что я уже проверил следующие темы: невозможно импортировать книгу в openpyxl, Ошибка импорта для openpyxl, библиотека openpyxl — ошибка jdcal


  • попробуйте переименовать файл python. Похоже, вы назвали его идентично имени модуля. Таким образом, модуль будет затенен сценарием. см. это 13.01.2016
  • @ M4rtini уже пробовал это. На всякий случай также перезагрузил компьютер, чтобы быть абсолютно уверенным, что IDLE все еще не ссылается на какую-то старую копию сценария. Но спасибо за подсказку! 13.01.2016
  • Итак, файл, упомянутый в выводе ошибки, переименован? \\verdc01\userdocs$\wkvdleeden\My Documents\Python excel\openpyxl.py Вы можете попробовать распечатать вывод px.__file__, чтобы увидеть, какой модуль фактически загружен. 13.01.2016
  • Ах, конечно: еще один файл с именем «openpyxl.py» все еще находился в этой папке… @M4rtini «px.__file__» сделал свое дело. Пожалуйста, добавьте это как ответ, и я приму его как ответ (и, если возможно, проголосую за). Большое спасибо!! 13.01.2016

Ответы:


1

Проблема заключается в скрипте с именем «openpyxl.py» в той же папке. При импорте модуля openpyxl этот локальный скрипт\модуль будет импортирован вместо глобального модуля.

Переименуйте этот файл, и он должен работать. print px.__file__, чтобы подтвердить, какой модуль действительно импортирован.

Еще одна распространенная ловушка, особенно для новичков, — это использование имени локального модуля, которое скрывает имя стандартной библиотеки или стороннего пакета или модуля, от которого зависит приложение. Один особенно удивительный способ столкнуться с этой ловушкой — использовать такое имя для сценария, так как это затем сочетается с предыдущей ловушкой «выполнение основного модуля дважды», чтобы вызвать проблемы. Например, если вы экспериментируете, чтобы узнать больше о модуле сокетов Python, вы можете назвать свой экспериментальный скрипт socket.py. Оказывается, это действительно плохая идея, так как использование такого имени означает, что интерпретатор Python больше не может найти реальный модуль сокета в стандартной библиотеке, так как видимый модуль сокета в текущем каталоге мешает:

Источник (Заметки Ника Коглана по Python)

13.01.2016
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..