[英]A module that has the same name as a module in standard library and also need to import the same module
我正在尝试编写一个简单的字符串工具来生成随机字符串。
我有string.py
在utils
目录下面的代码:
import string
import random
def generate_random_letters(str_len: int) -> str:
return ''.join(random.choice(string.ascii_letters) for _ in range(str_len))
我在交互式控制台中尝试过...
>>> from string import generate_random_letters
>>> generate_random_letters(10)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "xxx\app\utils\string.py", line 6, in generate_random_letters
return ''.join(random.choice(string.ascii_letters) for _ in range(str_len))
File "xxx\app\utils\string.py", line 6, in <genexpr>
return ''.join(random.choice(string.ascii_letters) for _ in range(str_len))
AttributeError: module 'string' has no attribute 'ascii_letters'
我尝试将string.py
更改为strings.py
并且可以工作。 因此,名称冲突是第一个原因
我也尝试删除import string
然后简单地执行
return ''
而且有效。 所以这是第二个原因。
我的目标是要做
import app.utils.string as string_util
string_util.generate_random_letters(10)
在python3.7中可能吗?
如果不可能,我绝对需要更改文件名。
但也请随时为这种情况建议任何好名字。但是,我认为以下任何一项都不是好事
_string.py
, my_string.py
, string_util.py
当然!
请注意,对于每个目录级别,您都需要在其中需要那些init .py文件。
我的string.py代码与您的代码匹配:
import string
import random
def generate_random_letters(str_len: int) -> str:
return ''.join(random.choice(string.ascii_letters) for _ in range(str_len))
我的aa_test_me.py代码:
import app.utils.string as string_util
print (string_util.generate_random_letters(10))
您应该尝试创建一个软件包,例如pk_utils或utils,并且string可以是软件包中的模块/类之一。
在utils目录中创建__init__.py
,
#!/usr/bin/env python
__all__ = [ "string" ]
在您的代码中-
from utils import string # instead of import string
string.generate_random_letters()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.