相关疑难解决方法(0)

从不同的文件夹导入文件

我有以下文件夹结构.

application/app/folder/file.py

我想从另一个驻留的Python文件中的file.py中导入一些函数

application/app2/some_folder/some_file.py

我试过了

from application.app.folder.file import func_name

和其他一些尝试,但到目前为止我无法正确导入.我怎样才能做到这一点?

python python-import importerror

1186
推荐指数
28
解决办法
121万
查看次数

如何修复"非包装中的尝试相对导入",即使使用__init__.py也是如此

我正在尝试遵循PEP 328,具有以下目录结构:

pkg/
  __init__.py
  components/
    core.py
    __init__.py
  tests/
    core_test.py
    __init__.py
Run Code Online (Sandbox Code Playgroud)

core_test.py我有以下import语句

from ..components.core import GameLoopEvents
Run Code Online (Sandbox Code Playgroud)

但是,当我运行时,我收到以下错误:

tests$ python core_test.py 
Traceback (most recent call last):
  File "core_test.py", line 3, in <module>
    from ..components.core import GameLoopEvents
ValueError: Attempted relative import in non-package
Run Code Online (Sandbox Code Playgroud)

搜索周围我发现" 相对路径甚至不能使用__init__.py "和" 从相对路径导入模块 ",但它们没有帮助.

这里有什么我想念的吗?

python init package python-import importerror

713
推荐指数
9
解决办法
47万
查看次数

运行具有典型测试目录结构的unittest

即使是简单的Python模块,非常常见的目录结构似乎是将单元测试分成它们自己的test目录:

new_project/
    antigravity/
        antigravity.py
    test/
        test_antigravity.py
    setup.py
    etc.
Run Code Online (Sandbox Code Playgroud)

例如,看看这个Python项目如何.

我的问题是,实际运行测试的常用方法什么?我怀疑这对除了我以外的所有人都是显而易见的,但你不能只是python test_antigravity.py从测试目录运行,因为import antigravity它将失败,因为模块不在路径上.

我知道我可以修改PYTHONPATH和其他搜索路径相关的技巧,但我不能相信这是最简单的方法 - 如果你是开发人员,那就没关系,但是如果他们只是想检查测试,那么期望用户使用是不现实的通过.

另一种选择只是将测试文件复制到另一个目录中,但它看起来有点愚蠢,并且忽略了将它们放在一个单独的目录中的重点.

那么,如果您刚刚将源代码下载到我的新项目中,您将如何运行单元测试?我更喜欢一个能让我对用户说的答案:"运行单元测试做X."

python unit-testing

641
推荐指数
13
解决办法
18万
查看次数

Python中的相对导入3

我想从同一目录中的另一个文件导入一个函数.

有时它适用于我,from .mymodule import myfunction但有时我会得到:

SystemError: Parent module '' not loaded, cannot perform relative import
Run Code Online (Sandbox Code Playgroud)

有时它适用from mymodule import myfunction,但有时我也得到:

SystemError: Parent module '' not loaded, cannot perform relative import
Run Code Online (Sandbox Code Playgroud)

我不明白这里的逻辑,我找不到任何解释.这看起来完全随机.

有人可以向我解释这一切背后的逻辑是什么吗?

python python-import python-3.x

589
推荐指数
16
解决办法
38万
查看次数

从父文件夹导入模块

我正在运行Python 2.5.

这是我的文件夹树:

ptdraft/
  nib.py
  simulations/
    life/
      life.py
Run Code Online (Sandbox Code Playgroud)

(我也在__init__.py每个文件夹中,为了便于阅读,这里省略了)

如何nib从模块内导入life模块?我希望有可能不用修补sys.path.

注意:正在运行的主模块位于该ptdraft文件夹中.

python directory module path python-import

552
推荐指数
21
解决办法
59万
查看次数

使用Python中的设置文件的最佳做法是什么?

我有一个命令行脚本,我运行了很多参数.我现在已经到了一个我有太多参数的地方,我想也有一些字典形式的参数.

因此,为了简化操作,我希望使用设置文件来运行脚本.我真的不知道用什么库来解析文件.这样做的最佳做法是什么?我当然可以自己敲一些东西,但是如果有一些库,那我就是耳朵.

一些"要求":

  • 而不是使用pickle我希望它是一个可以轻松阅读和编辑的直接文本文件.
  • 我希望能够在其中添加类似字典的数据,即应该支持某种形式的嵌套.

一个简化的伪示例文件:

truck:
    color: blue
    brand: ford
city: new york
cabriolet:
    color: black
    engine:
        cylinders: 8
        placement: mid
    doors: 2
Run Code Online (Sandbox Code Playgroud)

python settings configuration parsing yaml

308
推荐指数
4
解决办法
24万
查看次数

超出相对导入中的顶级包错误

看来这里已经有一些关于python 3中相对导入的问题了,但是在经历了很多这些问题后,我仍然找不到我的问题的答案.所以这是问题所在.

我有一个如下所示的包裹

package/
   __init__.py
   A/
      __init__.py
      foo.py
   test_A/
      __init__.py
      test.py
Run Code Online (Sandbox Code Playgroud)

我在test.py中有一行:

from ..A import foo
Run Code Online (Sandbox Code Playgroud)

现在,我在文件夹中package,我跑了

python -m test_A.test
Run Code Online (Sandbox Code Playgroud)

我收到了消息

"ValueError: attempted relative import beyond top-level package"
Run Code Online (Sandbox Code Playgroud)

但如果我在父文件夹中package,例如,我运行:

cd ..
python -m package.test_A.test
Run Code Online (Sandbox Code Playgroud)

一切都好.

现在我的问题是: 当我在文件夹中时package,我在test_A子包中运行模块test_A.test,根据我的理解,..A只上升一个级别,它仍然在package文件夹中,为什么它给出了消息说beyond top-level package.导致此错误消息的原因是什么?

python import package

238
推荐指数
12
解决办法
18万
查看次数

如何导入上面目录中的Python类?

我想继承一个位于当前目录之上的文件中的类.

是否可以相对导入该文件?

python directory module python-import

178
推荐指数
6
解决办法
17万
查看次数

任何人都可以解释python的相对进口吗?

我不能为我的生活得到python的相对导入工作.我创建了一个它不起作用的简单示例:

目录结构是:

/__init__.py
/start.py
/parent.py
/sub/__init__.py
/sub/relative.py
Run Code Online (Sandbox Code Playgroud)

/start.py 仅包含: import sub.relative

/sub/relative.py 只包含 from .. import parent

所有其他文件都是空白的.

在命令行上执行以下操作时:

$ cd /
$ python start.py
Run Code Online (Sandbox Code Playgroud)

我明白了:

Traceback (most recent call last):
  File "start.py", line 1, in <module>
    import sub.relative
  File "/home/cvondrick/sandbox/sub/relative.py", line 1, in <module>
    from .. import parent
ValueError: Attempted relative import beyond toplevel package
Run Code Online (Sandbox Code Playgroud)

我使用的是Python 2.6.为什么会这样?如何使这个沙盒示例工作?

python

165
推荐指数
2
解决办法
10万
查看次数

ImportError : 在没有已知父包的情况下尝试相对导入

我正在学习使用 python 编程,但在从包中的模块导入时遇到问题。我正在使用带有 Python 3.8.2 64 位的视觉工作室代码。

我的项目目录

.vscode
??? ecommerce
?   ??? __init__.py
?   ??? database.py
?   ??? products.py
?   ??? payments
?       ??? __init__.py
?       ??? authorizenet.py
?       ??? paypal.py
??? __init__.py
??? main.py
Run Code Online (Sandbox Code Playgroud)

ecommerce/products.py我的文件中:

.vscode
??? ecommerce
?   ??? __init__.py
?   ??? database.py
?   ??? products.py
?   ??? payments
?       ??? __init__.py
?       ??? authorizenet.py
?       ??? paypal.py
??? __init__.py
??? main.py
Run Code Online (Sandbox Code Playgroud)

这样我就可以Databaseecommerce/database.py文件中导入类。但我得到错误

ImportError : Attempted relative import with no known …
Run Code Online (Sandbox Code Playgroud)

python pylint

55
推荐指数
4
解决办法
7万
查看次数