【问题标题】:How can I import a python module whose name is a uid?如何导入名称为 uid 的 python 模块?
【发布时间】:2021-03-21 13:45:03
【问题描述】:

出于某种原因,我不得不将模块名称从 A.py 更改为 0880ceae-8a46-11eb-bcf6-38f9d349be8e.py0880ceae-8a46-11eb-bcf6-38f9d349be8e.pyuuid.uuid1()生成的uid。

更改后,我尝试通过以下两种方式从py文件中导入class B,均无效。

第一个解决方案是直接导入

from 0880ceae-8a46-11eb-bcf6-38f9d349be8e import B

它有一个错误SyntaxError: invalid token

第二种解决方法是在导入前定义一个变量

uid = '0880ceae-8a46-11eb-bcf6-38f9d349be8e'
from uid import Model_API

它有一个错误ModuleNotFoundError: No module named 'uid'

有人有好主意吗?谢谢。

【问题讨论】:

  • 在 Python 中,有效标识符不能包含破折号或以数字开头,模块名称是标识符。文件名 是否有 是该特定值,或者您可以添加前缀并更改破折号,例如 A_0880ceae_8a46_11eb_bcf6_38f9d349be8e.py
  • 如果您真的坚持使用非标准名称,您也许可以使用importlib 构造一些东西。

标签: python python-3.x pythonpath


【解决方案1】:

以下是使用 python3 测试的问题的可能解决方案:


# Modern approach
import importlib
module = importlib.import_module(".", "0880ceae-8a46-11eb-bcf6-38f9d349be8e")
module.hello()

# Deprecated way
module = __import__("0880ceae-8a46-11eb-bcf6-38f9d349be8e")
module.hello()

上述两种方法都经过测试并且有效。

以下是需要牢记的规则:

  • 检查你的文件名应该以.py扩展名结尾,.py.py会导致ModuleNotFoundError。
  • 确保在 importlib 模块中使用时不包含 .py 扩展名。

【讨论】:

  • 该错误是因为您在文档中混合了空格和制表符,请继续将文档中的所有制表符转换为空格,它将修复它。大部分 ide 都支持将制表符转换为空格。
  • 你有没有像问题一样,将py文件重命名为uid.py?好像也会有问题ModuleNotFoundError: No module named 'uid'
猜你喜欢
  • 1970-01-01
  • 2016-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多