При установке данных с github не удается найти версию - PullRequest
0 голосов
/ 09 марта 2020

Я удалил и заново установил последнюю версию datatable из репозитория

16:42:49/seirdc2.March8.in $sudo pip3 install 'datatable==0.10.1' 
Successfully installed datatable-0.10.1

Давайте посмотрим версию:

import datatable as dt
print(f'datatable version={dt.__version__}')

Ум упс !

Traceback (most recent call last):
  File "/git/corona/python/pointr/experiments/python/datatable.py", line 18, in <module>
    import datatable as dt
  File "/git/corona/python/pointr/experiments/python/datatable.py", line 19, in <module>
    print(f'datatable version={dt.__version__}')
AttributeError: module 'datatable' has no attribute '__version__'

Но почему?

enter image description here

Примечание: я видел другую странность с этим пакетом: например, не найти Frame - но не всегда.

1 Ответ

1 голос
/ 09 марта 2020

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

Traceback (most recent call last):
  File "/git/corona/python/pointr/experiments/python/datatable.py", line 18, in <module>
    import datatable as dt
  File "/git/corona/python/pointr/experiments/python/datatable.py", line 19, in <module>
    print(f'datatable version={dt.__version__}')
AttributeError: module 'datatable' has no attribute '__version__'

Не кажется ли вам подозрительным, что у вас есть линия 18, "вызывающая" линию 19? Я имею в виду, как это может быть? Вот как:

Когда вы называете свой скрипт datatable.py, а затем делаете import datatable, тогда вместо импорта фактического модуля из пакетов сайта он импортирует datatable.py «module». По сути, файл импортирует сам. И способ python управления импортом заключается в том, что он сначала создает модуль-заглушку в sys.modules (чтобы предотвратить бесконечные рекурсии во время импорта). В вашем случае модуль пытается импортировать сам себя, поэтому вместо него извлекается модуль-заглушка, а затем, когда вы пытаетесь напечатать его переменную __version__, оказывается, что она не существует.

Вы можете проверить вместо этого выведите dt.__file__, который должен показать местоположение импортируемого файла.

Излишне говорить, что все это c никак не указывает на наличие данных; например, если вы создали файл numpy.py, а затем попытались import numpy, у вас возникли бы те же проблемы.

...