【问题标题】:Executing python script from command line: error with imports从命令行执行 python 脚本:导入错误
【发布时间】:2013-02-10 08:15:06
【问题描述】:

我用 Eclipse 用 Python 编写了一个小脚本,它在 Eclipse 中执行时可以工作。但它不适用于命令行:

>python test.py argument1 argument2
from src import Tests, ImportError: No module named src

脚本存储在以下文件夹中:

ScriptFolder
.input
.report
.src
..test.py
..Tests
...Test1.py
...Test2.py
..TestUtils
...FileUtils.py

这就是我在 test.py 中进行导入的方式:

from src import Tests
from TestUtils import FileUtils

关于init.py文件,与test.py共享文件夹的是空的,进入Tests文件夹的有这样的内容:

import Test1
import Test2

而TestUtils中的init.py文件有这样的内容:

import FileUtils

问题是,如果我将行 from src import Tests 更改为只是 import Tests 我在 Eclipse 中遇到错误:Unresolved imports: Tests. found at src.Tests

如何使它同时适用于 Eclipse 和命令行?

【问题讨论】:

    标签: python eclipse command-line import pydev


    【解决方案1】:

    sys.path.append(path_to_src_directory)

    这将为 python 查找模块的默认路径添加一个路径。 因为,目前 python 不知道你的 src 目录的路径,它给出了No module named src 错误。 此外,您的 src 目录似乎没有 __init__.py 文件。

    【讨论】:

    • 我不明白为什么我需要将 init.py 文件放入根文件夹。无论如何,我也在导入 TestConstants.py,它位于根文件夹中,并且可以正常工作。我正在从 TestUtils 导入 FileUtils.py,并且可以正常工作。但是无法导入测试。为什么 python 知道在哪里查找这些文件而不是测试文件?以及如何使用 sys.path.append 调用?我想绝对路径不是一个好的实践,所以我怎样才能以相对的方式使用它?
    • "我不明白为什么我需要__init__.py" ... "为什么 Python 知道在哪里查找这些文件而不是测试文件" 第二个问题是首先。
    • @DanielRoseman 但我理解它在 Tests 文件夹中的用途,将每个 py 文件导入该文件夹,因此您只需导入“Tests”即可导入所有文件。但我不明白它在根文件中的用途。其实如果我编辑root的init.py文件,写import Tests,问题依旧
    • 您遇到了路径问题,就像 DhruvPathak 告诉您的那样。您最好阅读有关模块的文档:docs.python.org/2/tutorial/modules.html__init__.py 文件需要使 Python 将目录视为包含包;这样做是为了防止具有通用名称(例如字符串)的目录无意隐藏模块搜索路径中稍后出现的有效模块。在最简单的情况下,__init__.py 可以只是一个空文件,但它也可以执行包的初始化代码或设置__all__ 变量,稍后介绍。”跨度>
    猜你喜欢
    • 2020-04-15
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多