AttributeError: partially initialized module 'pickle' has no attribute 'dump'

Помогите. Делал задание по учебнику A Byte of Python. Точно такой же код, но выдает ошибку. Пытался искать

# Filename: pickling.py
import pickle

# the name of the file where we will store the object
shoplistfile = "shoplist.data"
# the list of things to buy
shoplist = ["apple", "mango", "carrot"]

# Write to the file
f = open(shoplistfile, "wb")
pickle.dump(shoplist, f)  # dump the object to a file
f.close()

del shoplist  # destroy the shoplist variable

# Read back from the storage
f = open(shoplistfile, "rb")
storedlist = pickle.load(f)  # load the object from the file
print(storedlist)

Ошибка:

Traceback (most recent call last):
  File "/Users/busterenko/Desktop/fgdg/pickle.py", line 2, in <module>
    import pickle
  File "/Users/busterenko/Desktop/fgdg/pickle.py", line 11, in <module>
    pickle.dump(shoplist, f)  # dump the object to a file
    ^^^^^^^^^^^
AttributeError: partially initialized module 'pickle' has no attribute 'dump' (most likely due to a circular import)

Ответы (2 шт):

Автор решения: Armen Legran

Ошибка, которую вы видите, связана с тем, что ваш файл называется pickle.py, что совпадает с именем стандартного модуля Python pickle. Когда вы пытаетесь импортировать модуль pickle, Python сначала ищет файл с таким именем в текущем каталоге, и поэтому он импортирует ваш собственный файл pickle.py, а не стандартный модуль.

Чтобы решить эту проблему, вы можете переименовать ваш файл pickle.py во что-то другое.

→ Ссылка
Автор решения: Alexander C

Проблема в том, что в рабочей папке есть файл с именем pickle.py. Когда вы пишете import pickle, система испортирует именно этот файл, а не стандартный модуль.

Отличие от ответа @armen-legran в том, что не важно как называется запускаемый файл. Важно, чтобы pickle.py не существовало.

А так как у вас сам скрипт называется pickle.py, то он пытается импортировать сам себя. Осюда и приписка most likely due to a circular import - циклический импорт.

→ Ссылка