Python3:尝试在非包中进行相对导入

2023-11-30

我对这个基本问题感到非常抱歉,因为它类似于:被相对进口所困扰

但我正在尝试遵循 PEP328http://www.python.org/dev/peps/pep-0328/#guido-s-decision这对我不起作用:(

这些是我的文件:

dev@desktop:~/Desktop/test$ ls
controller.py  __init__.py  test.py

2to3 说一切都是对的:

dev@desktop:~/Desktop/test$ 2to3 .
RefactoringTool: Skipping implicit fixer: buffer
RefactoringTool: Skipping implicit fixer: idioms
RefactoringTool: Skipping implicit fixer: set_literal
RefactoringTool: Skipping implicit fixer: ws_comma
RefactoringTool: No files need to be modified.

文件内容:

dev@desktop:~/Desktop/test$ cat controller.py 
class Controller:
    def __init__(self):
        pass

dev@desktop:~/Desktop/test$ cat __init__.py 
# -*- coding: utf-8 -*-

dev@desktop:~/Desktop/test$ cat test.py 
#!/usr/bin/env python
from .controller import Controller 
if __name__ == '__main__':
    print('running...')

但导入不起作用:

dev@desktop:~/Desktop/test$ python3 test.py 
Traceback (most recent call last):
  File "test.py", line 2, in <module>
    from .controller import Controller 
ValueError: Attempted relative import in non-package
dev@desktop:~/Desktop/test$ 

任何帮助表示赞赏!提前致谢!


您不能使用脚本within一套;你在跑步test, not test.test。因此,顶级脚本不能使用相对导入。

如果您想将包作为脚本运行,您需要移动test/test.py to testpackage/__main__.py,在 shell 中向上移动一个目录到~/Desktop并告诉 python 运行一个包python -m testpackage.

Demo:

$ ls testpackage/
__init__.py   __main__.py   __pycache__   controller.py
$ cat testpackage/controller.py 
class Controller:
    def __init__(self):
        pass

$ cat testpackage/__init__.py 
# -*- coding: utf-8 -*-

$ cat testpackage/__main__.py 
from .controller import Controller
if __name__ == '__main__':
    print('running...')

$ python3.3 -m testpackage
running...

您无法命名该包test; Python 已经为测试套件提供了这样一个包,并且会在当前工作目录中找到包之前找到该包。

另一种方法是创建一个脚本outside包并从脚本导入包。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python3:尝试在非包中进行相对导入 的相关文章

随机推荐

  • 关注 R 中的startsWith 和多种模式

    我注意到一个问题或疑虑startsWith 功能 以下代码显示两个不同的选择 第一个行为正常 是这样的代码块 dt test lt data table a c abcd poo abla ba id c 1 2 3 4 dt test s
  • 如何将 iOS 设备键盘更改为特定语言

    在iOS中 开发者可以获取当前设备语言和区域设置 但是 如果我们想根据用户的偏好将键盘设置为特定语言 区域设置 当用户位于应用程序的不同部分时 该怎么办 在我的应用程序中 有多种语言 我希望向用户显示阿拉伯语键盘 例如 当用户位于阿拉伯语部
  • 序列化 Drawable 时出现问题

    我有一个对象 它具有三个字段 两个字符串和一个Drawable public class MyObject implements Serializable private static final long serialVersionUID
  • 按作者列出类别〜WITH COUNTER〜(Wordpress)

    这是我得到的代码 它给出了给定作者已发表的类别的列表 但是 我非常希望类别名称旁边有一个数字 告诉作者在不同类别中发表了多少篇文章 有谁知道一个技巧吗 谢谢
  • 无需安装即可使用 SqlServer CE

    Given 干净的机器 不存在 SQL Server CE 一组 sdf 文件 Sql Server CE 数据库 不管它们是如何到达那里的 相关 Sql Server CE 的 DLL sqlceca35 dll sqlcecompact
  • 使用 angularjs 过滤两个选定日期之间的表数据时出现问题

    我正在根据两个选定的日期过滤表格内容 它确实过滤了日期 但结果不正确 dateRange Filter 写在控制器中 生产控制员 angular module app controller ProductionController scop
  • 如何即时播放非 PCM 文件或将其转换为 PCM?

    以下代码适用于某些 wav 文件 但适用于其他文件时 我得到 InvalidOperationException 未处理 Message Sound API 仅支持播放 PCM 波形文件 var webClient new WebClien
  • 在 Java 中将一系列图像转换为视频?

    目前 功能原型拥有工作所需的一切 一个半透明窗口 可以轻松调整您想要记录的位置的大小 多个线程来管理屏幕截图等 但我需要它完成的最后一项任务却没有完成我几个月了 我需要转换所有转储到我创建的文件夹中的图像temp 一切完成后我将其删除 放入
  • 如何在 PHP 中从 csv 文件中提取数据

    我有一个 csv 文件 如下所示 lines 0 text with commas another text 123 text 5 lines 1 some without commas another text 123 text line
  • 赋值和序列点:这怎么有歧义?

    考虑 C 代码a a a 没有用于赋值的序列点 因此此代码在编译有关未定义操作的警告时会产生警告a 可能的值是什么a这里可以有吗 这好像是a不可能改变价值观 这里实际上是否存在未定义的行为 或者编译器只是懒惰 序列点违规的未定义行为规则对于
  • 将图像添加到 JavaFX TableView 列中

    我是 Java 和 OOP 新手 并且陷入了向 tableview 列添加图像的困境 代码似乎有效 我可以看到学生的姓名正确 但图像未显示在列中 我收到此错误并且无法理解如何使其工作 javafx scene control cell Pr
  • 如何清除内容而不收到可怕的“停止运行此脚本”?对话?

    在 Windows 窗体中 某些控件上有 BeginUpdate EndUpdate 对 我想要类似的东西 但是对于 jQuery 我有一个 div 里面有一个 div 像这样 div class column div div div 在内
  • 解决 Android 不再支持的 Canvas.clipPath() 问题

    从安卓3 0开始剪辑路径 打开硬件加速的设备不再支持该方法 阅读本文article更多细节 我正在使用画布 我需要绘制圆形图像 关于我该如何做到这一点有什么想法吗 我无法关闭硬件加速 我正在寻找其他解决方案 回答 Tnx Malcolm 寻
  • ShapeDrawable 作为 Android 中评级栏的 ProgressDrawable?

    看来我无法将 ShapeDrawable 设置为 Ratingbar 的 ProgressDrawable 我尝试了以下方法但失败了
  • 我尝试将 Spring 的默认记录器更改为 log4j2 有什么问题吗?

    我是 Spring Boot 的新手 我想将默认记录器更改为 log4j2 因为它比 logback 具有更高的吞吐量 这是我的 Gradle 脚本 如您所见 我使用的是 Spring Boot 2 0 3 为了禁用默认记录器 我在 Spr
  • BluetoothChat 示例:NullPointerException [重复]

    这个问题在这里已经有答案了 可能的重复 getActionBar 返回 null 完全的安卓菜鸟 我正在尝试从 Galaxy S3 运行 BluetoothChat 示例 但它似乎在应用程序运行时崩溃了 这是 LogCat 输出 09 14
  • DataReader 为 null 或为空

    Using C 我有一个数据读取器 它从 mysql 数据库返回记录列表 我正在尝试编写代码来检查数据读取器是否为空 其背后的逻辑是 如果数据读取器有字段 则显示信息 否则隐藏该字段 我努力了 cmd1 new OdbcCommand Se
  • R 经济衰退日期转换

    我正在通过 R 将衰退带数据下载到 R 中quantmod 现在 这是一个二进制信息 xts 格式 看起来像这样 仅显示第一个衰退期 1857 01 01 0 1857 02 01 0 1857 03 01 0 1857 04 01 0 1
  • 使用反射动态地使用其名称检索静态变量

    如何使用 Java 反射动态地使用名称来检索静态变量 如果我有包含一些变量的类 public class myClass final public static string cfg1 01 02 81 82 final public st
  • Python3:尝试在非包中进行相对导入

    我对这个基本问题感到非常抱歉 因为它类似于 被相对进口所困扰 但我正在尝试遵循 PEP328http www python org dev peps pep 0328 guido s decision这对我不起作用 这些是我的文件 dev