使用 Click 库的 Python 3.6 中没有模块错误

2024-02-01

我正在尝试使用该包在 python 中构建 CLIclick。我使用的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

the 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

对此有什么想法吗?


当开始开发一个新的 python 项目时,我将尝试根据我的方法给出另一个答案。您打算分发您的项目,还是只是与某人分享?如果您这样做,您认为如何 - 这个人会因为需要记住命令而感到高兴吗

$ python path/to/project/codebase/cli/cli.py --help

使用你的工具?他记住命令不是更容易吗

$ cli --help

instead?

我建议您立即开始打包您的项目 - 编写一个最小的设置脚本:

from setuptools import setup, find_packages

setup(
    name='mypkg',
    version='0.1',
    packages=find_packages(),
    install_requires=['click'],
    entry_points={
        'console_scripts': ['cli=cli.cli:cli'],
    },
)

当新需求出现时,您始终可以增强您的设置脚本。将安装脚本放置在代码库的根目录中:

├── setup.py
├── cli
│   ├── __init__.py
│   ├── aws
...

Now run python setup.py develop or even better, pip install --editable=.1 from the codebase root directory (where the setup.pyscript is). You have installed your project in the development mode and now can invoke

$ cli --help

所有导入均已正确解决(这将解决您的问题)。但除此之外,您还可以获得更多 - 您获得了一种打包项目以准备分发给目标用户的方法,以及一个干净的命令行界面,您的用户将以与您刚才相同的方式调用该界面。

现在继续项目开发。如果你改变代码cli命令,它将即时应用,因此您无需在每次更改任何内容时重新安装项目。

一旦您准备好项目开发并希望将其交付给您的用户,请发出:

$ python setup.py bdist_wheel

这会将您的项目打包成可安装的wheel文件(您需要安装wheel包以便能够调用命令:pip install wheel --user)。通常它会驻留在dist代码库根目录的子目录。将此文件提供给用户。要安装该文件,他将发出

$ pip install Downloads/mypkg-0.1-py3-none.whl --user

并可以立即开始使用您的工具:

$ cli --help

这是一个非常简单的描述,有很多东西需要学习,但也有大量有用的材料可以指导您完成整个过程。

如果您想了解有关该主题的更多信息:作为快速入门参考,我会推荐优秀的PyPA 打包指南 https://packaging.python.org/。包装用click命令,他们自己的文档就足够了 http://click.pocoo.org/5/setuptools/.


  1. 我鼓励你使用pip用于分发和包装开发(如果适用),因为它是一个标准工具。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Click 库的 Python 3.6 中没有模块错误 的相关文章

  • Python:多处理和请求

    以下是我正在运行的使用多处理并行触发 HTTP 请求的代码片段 在控制台上运行后 它挂在 requests get url 处 既不继续前进也不抛出错误 def echo 100 q print before r requests get
  • 如何配置散景图以具有响应宽度和固定高度

    我使用通过组件功能嵌入的散景 实际上我使用 plot sizing mode scale width 它根据宽度进行缩放并保持纵横比 但我想要一个响应宽度但固定或最大高度 这怎么可能实现呢 有stretch both and scale b
  • 使用 Flask SQLAlchemy 进行表(模型)继承

    我遵循了这个建议question https stackoverflow com questions 1337095 sqlalchemy inheritance但我仍然收到此错误 sqlalchemy exc NoForeignKeysE
  • 垂直线 axvline 在 matplotlib 的 loglog 图中绘制位于错误位置的线

    我在使用 axvline 在 matplotlib 的 loglog 图中绘制垂直线时遇到问题 第一个问题是垂直线没有出现在正确的位置 第二个问题 可能相关的是 当我放大或平移绘图时 垂直线只是保持在原位 并且没有通过平移 滑动绘图 或放大
  • Keras,如何获取每一层的输出?

    我已经用 CNN 训练了一个二元分类模型 这是我的代码 model Sequential model add Convolution2D nb filters kernel size 0 kernel size 1 border mode
  • 01 无效令牌[重复]

    这个问题在这里已经有答案了 嘿 学习 python3有一段时间了 遇到字典和dictionary name get 方法并尝试获取随机键值 问题 data data get key 1 它有效并且返回 1 但如果我使用data get ke
  • Python 中的二进制相移键控

    我目前正在编写一些代码 以使用音频转换通过激光传输消息 文件 和其他数据 我当前的代码使用 python 中 binascii 模块中的 hexlify 函数将数据转换为二进制 然后为 1 发出一个音调 为 0 发出不同的音调 这在理论上是
  • 代理阻止网络套接字?如何绕行

    我有一个用 Python 编写的正在运行的 websocket 服务器 来自https github com opiate SimpleWebSocketServer https github com opiate SimpleWebSoc
  • python 语言环境奇怪的错误。这究竟是怎么回事?

    所以今天我升级到了 bazaar 2 0 2 我开始收到这条消息 顺便说一句 我在雪豹上 bzr warning unknown locale UTF 8 Could not determine what text encoding to
  • keras 预测内存交换无限期增加

    我使用keras实现了一个分类程序 我有一大组图像 我想使用 for 循环来预测每个图像 然而 每次计算新图像时 交换内存都会增加 我尝试删除预测函数内部的所有变量 并且我确信该函数内部存在问题 但内存仍然增加 for img in ima
  • 超时时杀死或终止子进程?

    我想尽可能快地重复执行子进程 然而 有时这个过程会花费太长的时间 所以我想杀死它 我使用 signal signal 如下所示 ppid pipeexe pid signal signal signal SIGALRM stop handl
  • Python将csv数据导出到文件中

    我有以下运行良好的代码 但我无法修剪数据并将其存储在数据文件中 import nltk tweets love this car this view amazing not looking forward the concert def g
  • 如何创建指向指针数组的 Python ctypes 指针

    我需要学习如何处理char 在下面的 C 方法中通过 Python ctypes 我通过使用调用其他只需要单个指针的方法做得很好create string buffer 但此方法需要一个指向指针数组的指针 ladybugConvertToM
  • 将 ASCII 字符转换为“”unicode 表示法的脚本

    我正在对 Linux 区域设置文件进行一些更改 usr share i18n locales like pt BR 并且需要格式化字符串 例如 d m Y H M 必须以 Unicode 指定 其中每个 在本例中为 ASCII 字符表示为
  • 如何从c++调用python

    我是Python新手 我尝试像这样从 C 调用 python 脚本 在 Raspberry Pi 中 std string pythonCommand python Callee py a b int res system pythonCo
  • 写入 UDP 套接字会被阻塞吗?

    如果是的话 在什么条件下 或者 换句话说 在twisted 中运行此代码是否安全 class StatsdClient AbstractStatsdClient def init self host port super StatsdCli
  • 在 groupby 聚合函数中传递参数

    我有我引用的数据框df在代码中 我在每组的多个列上应用聚合函数 我还应用了用户定义的 lambda 函数f4 f5 f6 f7 有些功能非常相似 例如f4 f6 and f7其中只有参数值不同 我可以从以下位置传递这些参数吗字典 d 这样我
  • Pandas - 分割大的Excel文件

    我有一个大约有 500 000 行的 Excel 文件 我想将其拆分为多个 Excel 文件 每个文件有 50 000 行 我想用熊猫来做 这样它会是最快和最简单的 有什么想法如何制作吗 感谢您的帮助 假设您的 Excel 文件只有一个 第
  • 在 Gensim 中通过 ID 检索文档的字符串版本

    我正在使用 Gensim 进行一些主题建模 并且已经达到使用 LSI 和 tf idf 模型进行相似性查询的程度 我取回 ID 集和相似点 例如 299501 0 64505910873413086 如何获取与 ID 在本例中为 29950
  • 在 pyhf 中针对小信号模型拟合收敛失败

    这是我们 pyhf 开发团队 最近提出的一个问题 认为很好并且值得分享 因此我们在这里发布了它的修改版本 我正在尝试做一个简单的假设检验pyhf v0 4 0 https pypi org project pyhf 0 4 0 我使用的模型

随机推荐

  • 如何在 ActionScript 3 中从类实例获取 Class 对象?

    如何获取 actionscript 类的实例Class来自该类的一个实例 在 Python 中 这将是x class 在爪哇语中 x getClass 我知道某些可怕的黑客行为 http actionscript org forums sh
  • 如果选择了父项,则选择子项单选按钮,反之亦然

    我有这样的情况
  • 在 EV3 和 PC 之间发送数据

    我正在对机器人进行编程 它需要在 EV3 和我的笔记本电脑 Windows 之间发送数据 我在 EV3 上运行 pybricks 这使我能够使用 python 进行编码 我已经做了研究 但唯一剩下的就是 2014 年的一些博客 它们也没有帮
  • 这是C# Monad,问题出在哪里?

    读一上一个问题 https stackoverflow com questions 35951818 why can the monad interface not be declared in java 35959910 35959910
  • 使用 VBS 更改 Active Directory 中的密码到期日期

    我正在尝试使用 VBScript 更改 Active Directory 中用户的密码到期日期 我有获取有关用户密码的信息的代码 但我找不到有关如何更改密码的任何信息 任何帮助将不胜感激 这是我的代码 Const SEC IN DAY 86
  • 为什么编译器抱怨对齐?

    我想了解更多关于对齐的信息 为什么 Microsoft 编译器 Visual Studio 2012 Express 会抱怨以下代码片段的对齐情况 declspec align 16 class Foo public virtual Foo
  • seq 和 == 运算符的神秘行为。精度问题?

    我遇到了该函数的某种奇怪 或只是出乎意料 的行为seq 创建简单序列时 某些值无法与 运算符正确匹配 看这个最小的例子 my seq lt seq 0 0 4 len 5 table my seq ok returns 0 0 1 0 2
  • XSLT 聚合 XML 标记值并存储新标记

    我是 xslt 的新手 并尝试使用 XSLT 处理以下 XML
  • 奥尔良任务的交错

    有一个问题here https stackoverflow com questions 54456369 orleans single threaded nature not respected by continuewith其中 Orle
  • 如何使用 knit::spin 注释掉行

    使用时spin包装内knitr 如何简单地注释掉一些东西 使它们看不见旋转 roxygen风格线 被视为出现在报告中的行 通常的 R 注释 被视为R注释并出现在代码块中 仅是文本且开头没有特殊字符的行会导致错误 以 开头的行LaTeX评论
  • PHP 类自动加载

    我有一个 简单框架 其主要实例是 app 现在 实现自动加载器的最佳方法是什么 不使用 Composer 我需要的是有一个处理所有自动加载的类 支持各种名称空间 我有一些方法 困境 起初我认为我应该创建一个处理所有事情的 静态 类 但后来我
  • Boost random::discrete_distribution 构建后如何更改权重?

    好的 可以在 boost random discrete distribution 中给出权重 概率 e g 双倍概率 0 5 0 1 0 1 0 1 0 1 0 1 boost random discrete distributiondi
  • 使用 PowerShell 重命名文件以增加文件编号?

    我有一堆名为 attachment 023940 attachment 024039 attachment 024041 attachment 024103 etc 我需要通过将文件号增加给定的数字来重命名文件 以便它们与数据库中的正确 I
  • gperftools CPU profiler 究竟是如何启动的?

    gperftools 文档 http google perftools googlecode com svn trunk doc cpuprofile html说libprofiler应该链接到目标程序 gcc myprogram c lp
  • 无法从具有多个返回的 Select 中的使用情况推断出 C# 类型参数

    我不认为我做了任何太深奥的事情 但我没有看到任何其他与此相关的问题 以下代码 我已将其简化为要点 在 C 4 中生成编译器错误 但是 类型参数是什么应该是显而易见的 有一个最大公分母 类 A 也明确定义在方法 Frob 的返回类型 难道编译
  • NodeJS base64 图像编码/解码不太工作

    我一直在尝试将发布到nodeJS 和express框架 的图像保存到数据库 但遇到了一些麻烦 忽略所有的 Web 处理 我认为我已经将问题范围缩小到了 Node js 中进行 Base64 编码的方式 我相信下面过于简化的示例应该可以工作
  • 如何将 tibble 导出为 .csv

    我使用 rfm 包进行了 rfm 分析 结果在 tibble 中 我似乎不知道如何将其导出到 csv 我尝试了下面的参数 但它导出了一个空白文件 gt dim bmdata4RFM 1 1182580 3 gt str bmdata4RFM
  • C 中的 #line 关键字

    我试图理解一些代码 但遇到了一个我以前从未见过的关键字 我尝试用谷歌搜索它 但也没有找到任何有关它的信息 char valtext line 1 Values l define INITIAL 0 line 2 Values l int r
  • 如何使用注释在 Spring MVC 中创建默认方法?

    我找不到解决办法 这让我发疯 我映射了 Controller 它使用 RequestMapping 响应多种方法 当没有指定更具体的情况时 我想将其中一种方法标记为默认方法 例如 Controller RequestMapping user
  • 使用 Click 库的 Python 3.6 中没有模块错误

    我正在尝试使用该包在 python 中构建 CLIclick 我使用的Python版本是3 6 这是我的应用程序的主要部分 import os import click cmd folder os path join os path dir