Estoy creando un proyecto llamado OpenCity que contiene una versión premium. El paquete premium es el problema.

La jerarquía del proyecto es:

opencity // is a project in PyCharm 2019.3
      premium // is a package
             __init__.py // is a module
             premium.py // is a module
             premium_user.py // is a module
             premium_user.txt // is a text file

Premium_user.py:

import random as ran


def premium_users_adder():
    premium_user1a = open('premium_user.txt', 'a')
    # premium_user1w = open('premium_user.txt', 'w')
    # premium_user1r = open('premium_user.txt', 'r')
    p2 = int(input("How many members do you want to add to premium_users to database? "))
    p1 = []
    p3 = []
    for i in range(p2):
        member = input("Type the person's name. ")
        p1.append(member)
        id1 = ran.randint(100000000, 99999999999)
        p3.append(str(id1))
    for i, e in zip(p1, p3):
        premium_user1a.write(i + ' ' + e + '\n')
    premium_user1a.close()
    print()
    print("Done")


def premium_users_checker():
    premium_user1r = open('premium_user.txt', 'r')
    p2 = []
    for data in premium_user1r:
        p2.append(data)
        print(p2)

Premium.py:

import premium.premium_users as pu
pu.premium_users_adder()
pu.premium_users_checker()

Error al ejecutar premium.py:

Traceback (most recent call last):
  File "F:/PyCharm Python Works/OpenCity/premium/premium.py", line 1, in <module>
    import premium.premium_users as pu
  File "F:\PyCharm Python Works\OpenCity\premium\premium.py", line 1, in <module>
    import premium.premium_users as pu
ModuleNotFoundError: No module named 'premium.premium_users'; 'premium' is not a package

He dado todo excepto el premium_users.txt que contiene códigos premium.

1
sairam kumar 27 dic. 2019 a las 17:48

2 respuestas

La mejor respuesta

Estos errores ocurren porque su módulo local llamado premium.py oculta el módulo premium instalado que está tratando de usar. El directorio actual se antepone a sys.path, por lo que el nombre local tiene prioridad sobre el nombre instalado (puede leer más sobre cómo Python encuentra paquetes aquí ).

Una sugerencia adicional de depuración cuando aparece es mirar el Traceback cuidadosamente y darse cuenta de que el nombre de su script en cuestión coincide con el módulo que está tratando de importar:

Observe el nombre que usó en su script:

File "F:/PyCharm Python Works/OpenCity/premium/premium.py", line 1, in <module>

El módulo que está intentando importar: premium

Cambie el nombre de su módulo a otra cosa para evitar la colisión de nombres.

Python puede generar un archivo premium.pyc junto a su archivo premium.py (en el directorio __pycache__ en Python 3). Elimine eso también después de cambiarle el nombre, ya que el intérprete seguirá haciendo referencia a ese archivo, reproduciendo el error. Sin embargo, el archivo pyc en __pycache__ no debería afectar su código si el archivo py se ha eliminado.

2
Eyal Golan 27 dic. 2019 a las 15:03

También puede usar from y luego import cualquier módulo

Hacer esto-

from premium import premium_users as pu

En lugar de-

import premium.premium_users as pu
-1
Tanvir Islam Streame 28 dic. 2019 a las 09:03