1
resposta

importError ao tentar importar functools

Olá pessoal. Estou transcrevendo as aulas de Python Collections no PyCharm.

Meu código está assim:

from operator import attrgetter
from functools import total_ordering

@total_ordering
class ContaSalario:

    def __init__(self, codigo):
        self._codigo = codigo
        self._saldo = 0

    def passaMes(self):
        pass

    def __eq__(self, other):
        if type(self) != ContaSalario:
            return False

        return (self._codigo == outro.codigo and self._saldo == outro._saldo)

    def deposita(self, valor):
        self._saldo += valor

    def __str__(self):
        return (f'Conta = {self._codigo}, Saldo = {self._saldo}')

    def __lt__(self, other):
        if self._saldo < other._saldo:
            return self._saldo < other._saldo
        else:
            return self._codigo < other._codigo

Mas estou recebendo erro ao tentar importar o total_ordering:

/Users/rafaelviegas/PycharmProjects/Collections/venv/bin/python /Users/rafaelviegas/PycharmProjects/Collections/collections.py 
Traceback (most recent call last):
  File "/Users/rafaelviegas/PycharmProjects/Collections/collections.py", line 2, in <module>
    from functools import total_ordering
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/functools.py", line 18, in <module>
    from collections import namedtuple
  File "/Users/rafaelviegas/PycharmProjects/Collections/collections.py", line 2, in <module>
    from functools import total_ordering
ImportError: cannot import name 'total_ordering' from partially initialized module 'functools' (most likely due to a circular import) (/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/functools.py)

Podem me ajudar? Não consegui encontrar solução no StackOverflow ou no google.

1 resposta

Olá Rafael, como você está?

Isso pode estar ocorrendo devido ao nome do seu arquivo possuir o nome collections, que é um nome reservado para um módulo em Python. Como você nomeou seu arquivo como collections.py, o Python pode tentar importar esse arquivo em vez do módulo collections que internamente a biblioteca functools utiliza.

Sendo assim, renomeie seu arquivo collections.py para outro nome, como, por exemplo, main.py, dessa forma, você evitar conflitos com outros arquivos ou módulos que possam ter o mesmo nome.

Após renomear, execute novamente o código e verifique se obterá êxito.

Vale ressaltar não haver documentação oficial que liste todos os nomes de arquivos que não podem ser usados, pois isso pode variar dependendo da versão específica do Python e da configuração. No entanto, você pode consultar a documentação do Python para os módulos de biblioteca padrão e funções integradas para ter uma ideia de nomes comumente usados que devem ser evitados:

Espero ter ajudado. Em caso de dúvidas estou à disposição.

Em caso de dúvidas estou à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!