繁体   English   中英

与标准库中的模块同名的模块,并且还需要导入相同的模块

[英]A module that has the same name as a module in standard library and also need to import the same module

我正在尝试编写一个简单的字符串工具来生成随机字符串。

我有string.pyutils目录下面的代码:

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.pymy_string.pystring_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM