Проблема с base64 в python

Пишу шифровщик base64. Но вот такая проблема.

Код

import base64

filepath = input("Input filepath... ")

with open(filepath, "r") as file:
    readfile = file.read()
    choice = input("Encode or decode? [E/D]")
    if(choice == "E"):
        encoded = base64.b64encode(readfile)
        print(encoded)
    elif(choice == "D"):
        decoded = base64.b64decode(readfile)
        print(decoded)

функцию b64decode и b64encode попросту не видят. Буквально. Вот, что выдает, когда я запускаю программу и выбираю файл(файл - file.txt, текст - Hello, World!)

#Стек ошибок #

Input filepath... file.txt
Encode or decode? [E/D]E
Traceback (most recent call last):
  File "base64.py", line 1, in <module>
    import base64
  File "C:\Users\dotco\Desktop\base64\base64.py", line 9, in <module>
    encoded = base64.b64encode(readfile)
AttributeError: partially initialized module 'base64' has no attribute 'b64encode' (most likely due to a circular import)

Однако, при выводе функции dir(base64):

['MAXBINSIZE', 'MAXLINESIZE', '_85encode', '_A85END', '_A85START', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_a85chars', '_a85chars2', '_b32alphabet', '_b32rev', '_b32tab2', '_b85alphabet', '_b85chars', '_b85chars2', '_b85dec', '_bytes_from_decode_data', '_input_type_check', '_urlsafe_decode_translation', '_urlsafe_encode_translation', 'a85decode', 'a85encode', 'b16decode', 'b16encode', 'b32decode', 'b32encode', 'b64decode', 'b64encode', 'b85decode', 'b85encode', 'binascii', 'bytes_types', 'decode', 'deecode', 'standard_b64encode', 'struct', 'test', 'urlsafe_b64decode', 'urlsafe_b64encode']

Те функции появляются. Объясните, пожалуйста, что можно сделать.


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

Автор решения: wowlikon

У меня уже возникала такая проблема. По каким-то причинам питон только в интерактивной среде видит модуль base64, а в коде нет. Решением является установка pybase64. pip install pybase64 и теперь в коде вместо base64 используешь pybase64. (функции у них одинаковые и поэтому код значимо переделывать не приходится)

→ Ссылка