Странное поведение tabula-py

1

Я использую Python 3.5 с дистрибутивом Anaconda. tabula-py версии 1.1.1. Когда я запускаю следующую простую программу:

import tabula

df = tabula.read_pdf("sample.pdf", pages=1, encoding="ISO-8859-1")

df.columns = df.iloc[0]

df.drop(0, inplace=True)

Появляется следующее сообщение об ошибке:

AttributeError: module 'tabula' has no attribute 'read_pdf'

ОДНАКО: Если я открываю Spyder и первый тип "import tabula" в консоли IPython перед запуском кода, он работает отлично. Если я перезапущу ядро, я получаю ту же ошибку, пока не закрою и не открою Spyder.

Какие-нибудь мысли? Заранее спасибо.

  • 0
    Да. Spyder имеет общее пространство имен. Импортированные модули кэшируются. Вы не должны полагаться на это поведение; вы должны явно импортировать модуль вверху вашего скрипта
  • 0
    Вы называли себя скриптом tabula.py ?
Теги:
tabula

1 ответ

2

Spyder имеет общее пространство имен между консолью и вашими сценариями. Я ответил, реверс этой проблемы здесь.

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

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

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

  • 0
    Не уверен, что понимаю ваш комментарий, Роганёш. Посмотри на мой сценарий. Первая строка - «import tabula», поэтому я импортировал ее в начало моего скрипта и не назвал ее tabula-py.
  • 0
    @SteveOlsen да, но импорт кэшируется, поэтому импорт в верхней части скрипта ничего не делает после импорта модуля с таким именем в консоли. Что вы получаете за import tabula; print(tabula.__file__) a) после перезапуска ядра и только импорта в сценарий и b) перезапуска ядра и импорта только в консоли?
Показать ещё 3 комментария

Ещё вопросы

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