click
패키지를 사용하여 Python으로 CLI를 작성하려고합니다. 내가 사용 파이썬 버전은 3.6
Python 3.6에서 클릭 라이브러리가있는 모듈 오류가 없습니다.
이 내 응용 프로그램의 기본입니다 :
import os
import click
cmd_folder = os.path.join(os.path.dirname(__file__), 'commands')
class IAMCLI(click.MultiCommand):
def list_commands(self, ctx):
rv = []
for filename in os.listdir(cmd_folder):
if filename.endswith('.py') and \
filename.startswith('cmd_'):
rv.append(filename[4:-3])
rv.sort()
return rv
def get_command(self, ctx, cmd_name):
ns = {}
fn = os.path.join(cmd_folder, 'cmd_{}.py'.format(cmd_name))
with open(fn) as f:
code = compile(f.read(), fn, 'exec')
eval(code, ns, ns)
return ns['cli']
@click.command(cls=IAMCLI)
@click.option('--env', default='dev', type=click.Choice(['dev', 'staging', 'production']),
help='AWS Environment')
@click.pass_context
def cli():
"""AWS IAM roles and policies management CLI."""
pass
if __name__ == '__main__':
cli()
를이 트리입니다 :
├── cli
│ ├── __init__.py
│ ├── aws
│ │ ├── __init__.py
│ │ ├── policy.py
│ │ └── role.py
│ ├── cli.py
│ └── commands
│ ├── __init__.py
│ └── cmd_dump.py
cmd_dump.py
은 다음과 같습니다
import click
from cli.aws.role import fetch_roles
@click.command('dump', short_help='Dump IAM resources')
@click.pass_context
def cli():
pass
문제는 실행하려고 할 때입니다. python cli/cli.py --help
이것은 내가 얻은 것입니다 :
File "cli/commands/cmd_dump.py", line 3, in <module>
from cli.aws.role import fetch_roles
ModuleNotFoundError: No module named 'cli.aws'; 'cli' is not a package
그 밖의 생각은 없습니까?
'cli.py'의 상위 디렉토리는'sys.path' 앞에 추가되므로 cli.py 스크립트에서'aws.role.fetch_roles'를 가져 오려고합니다. – vaultah
여기서'os.path.join (cmd_folder, 'cmd _ {}. py '.format (cmd_name))'? – Mazzy
해결 방법이 명확하지 않습니다. 어떤 생각? – Mazzy