我在这方面有问题。不要介意大胆的。我无法说出什么问题和问题出在哪里。我正在创建一个名为OpenCity的项目。它包含一个高级版本。高级套餐是问题所在。项目层次结构为
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()
运行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
请帮助我解决此问题,以便我可以按时发布。提前致谢。除了包含高级代码的premium_users.txt,我已经提供了所有内容。
出现这些错误是因为名为premium.py
的本地模块遮盖了您要使用的已安装高级模块。当前目录位于sys.path
之前,因此本地名称优先于已安装的名称(您可以阅读有关python如何查找软件包的信息 here的更多信息。
出现此问题时,一个额外的调试技巧是仔细查看Traceback,并意识到所涉及脚本的名称与您要导入的模块匹配:
注意您在脚本中使用的名称:
File "F:/PyCharm Python Works/OpenCity/premium/premium.py", line 1, in <module>
您要导入的模块:premium
将模块重命名为其他名称以避免名称冲突。
Python可能会在premium.pyc
文件旁边(在Python 3的premium.py
目录中)生成一个__pycache__
文件。重命名后也要删除该文件,因为解释器仍将引用该文件,从而重现错误。但是,如果py文件已删除,则pyc
中的__pycache__
文件不应影响您的代码。
您也可以使用from
然后使用import
任何模块
执行此操作-
from opencity.premium import premium_users as pu
而不是-
import premium.premium_users as pu