Aks*_*tap 3 python module python-module python-3.x pipenv
我有一个目录结构如下的项目
.
??? Pipfile
??? Pipfile.lock
??? module
? ??? __init__.py
? ??? helpers
? ? ??? __init__.py
? ? ??? __pycache__
? ? ? ??? __init__.cpython-36.pyc
? ? ??? dynamo.py
? ? ??? logger.py
? ??? test.py
Run Code Online (Sandbox Code Playgroud)
相关代码
logger.py
import click
import sys
from tabulate import tabulate
def formatter(string, *rest):
return string.format(*rest)
def info(*rest):
"""Write text in blue color
"""
click.echo(click.style('? ' + formatter(*rest), fg='blue'))
Run Code Online (Sandbox Code Playgroud)
test.py
import helpers
helpers.logger.info('Trying')
Run Code Online (Sandbox Code Playgroud)
当我尝试使用命令运行
python3 module/test.py
Run Code Online (Sandbox Code Playgroud)
我得到这个错误
Traceback (most recent call last):
File "module/test.py", line 4, in <module>
helpers.logger.info('Trying')
AttributeError: module 'helpers' has no attribute 'logger'
Run Code Online (Sandbox Code Playgroud)
我曾尝试重新编写代码。将helpers目录放在目录之外module。但是从我所读的内容来看,它仍然行不通,不应该这样做。我尝试研究有关__init__.pypython模块系统的知识。我读得越多,就会越困惑。但是从我学到的东西,我创建了另一个示例项目。具有以下结构,
.
??? test
??? __init__.py
??? helpers
? ??? __init__.py
? ??? __pycache__
? ? ??? __init__.cpython-36.pyc
? ? ??? quote.cpython-36.pyc
? ??? quote.py
??? index.py
??? logger
? ??? __init__.py
? ??? __pycache__
? ? ??? __init__.cpython-36.pyc
? ? ??? info.cpython-36.pyc
? ??? info.py
Run Code Online (Sandbox Code Playgroud)
代码与第一个项目相同。
我来的时候
python3 test/index.py
Run Code Online (Sandbox Code Playgroud)
它按预期工作。只有这两个项目之间的区别:
在第一个项目中,我曾经
pipenv安装过deps和创建虚拟环境。
使用您的初始布局(有loggers作为的一个子模块helpers包),你需要明确地导入loggers在helpers/__init__.py它暴露的的属性helpers包:
# helpers/__init__.py
from . import logger
Run Code Online (Sandbox Code Playgroud)
logger是模块而不是属性,并且helpers.logger评估logger为属性。实际上,您应该执行以下操作:
from helpers import logger
print(logger.info('Trying'))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5449 次 |
| 最近记录: |