相关疑难解决方法(0)

从相对路径导入模块

如何根据相对路径导入Python模块?

例如,如果dirFoo包含Foo.pydirBar,和dirBar包含Bar.py,我怎么导入Bar.pyFoo.py

这是一个直观的表示:

dirFoo\
    Foo.py
    dirBar\
        Bar.py
Run Code Online (Sandbox Code Playgroud)

Foo希望包括Bar,但重组文件夹层次结构不是一种选择.

python relative-path python-import

749
推荐指数
16
解决办法
88万
查看次数

如何在Python中进行相对导入?

想象一下这个目录结构:

app/
   __init__.py
   sub1/
      __init__.py
      mod1.py
   sub2/
      __init__.py
      mod2.py
Run Code Online (Sandbox Code Playgroud)

我正在编码mod1,我需要从中导入一些东西mod2.我该怎么办?

我尝试了from ..sub2 import mod2但是我得到了"尝试非包装中的相对导入".

我google了一下,但发现只有" sys.path操纵"黑客.有没有干净的方式?


编辑:我__init__.py的所有人目前都是空的

EDIT2:我想这样做,因为SUB2包含了为子包(共享类sub1,subX等等).

Edit3:我正在寻找的行为与PEP 366中描述的相同(感谢John B)

python python-module python-import

508
推荐指数
11
解决办法
31万
查看次数

Python模块的绝对与显式相对导入

我想知道在Python应用程序中导入包的首选方法.我有这样的包结构:

project.app1.models
project.app1.views
project.app2.models
Run Code Online (Sandbox Code Playgroud)

project.app1.views进口project.app1.modelsproject.app2.models.有两种方法可以实现这一点.

绝对进口:

import A.A
import A.B.B
Run Code Online (Sandbox Code Playgroud)

或者使用PEP 328Python 2.5中引入的显式相对导入:

# explicit relative
from .. import A
from . import B
Run Code Online (Sandbox Code Playgroud)

什么是最pythonic的方式来做到这一点?

python package python-import

73
推荐指数
3
解决办法
4万
查看次数

`import module`比`from module import function`更好的编码风格?

我们from module import function称之为FMIF编码风格.

我们import module称之为IM编码风格.

我们from package import module称之为FPIM编码风格.

为什么IM + FPIM被认为是比FMIF更好的编码风格?(请参阅此帖子以获取此问题的灵感.)

以下是一些让我更喜欢FMIF而非IM的标准:

  1. 代码简短:它允许我使用更短的函数名称,从而有助于坚持80行每行约定.
  2. 可读性:chisquare(...)看起来比可读性更强 scipy.stats.stats.chisquare(...).虽然这是一个主观标准,但我认为大多数人会同意.
  3. 缓解重定向:如果我使用FMIF出于某种原因,在一段时间后要重定向蟒蛇定义functionalt_module不是module我需要改变只有一条线路:from alt_module import function.如果我使用IM,我需要更改许多行代码.
我意识到FPIM在某种程度上取消了前两个问题,但是第三个呢?

我对IM + FPIM可能比FMIF更好的所有原因感兴趣,但特别是,我有兴趣详细说明这里提到的以下几点:

IM的优点:

  1. 易于模拟/注入测试.(我对嘲笑并不是很熟悉,虽然我最近了解了这个术语的含义.你能展示一下代码,它展示了IM在这里比FMIF更好吗?)
  2. 通过重新定义某些条目来灵活更改模块的能力.(我一定是误解了一些东西,因为这似乎是FMIF相对于IM的优势.请参阅我上面支持FMIF的第三个理由.)
  3. 序列化和恢复数据的可预测和可控行为.(我真的不明白IM或FMIF的选择如何影响这个问题.请详细说明.)
  4. 我理解FMIF"污染了我的命名空间",但除了是一个消极的说法之外,我不理解这会如何以任何具体的方式伤害代码.
PS.在写这个问题的时候,我收到一个警告,说这个问题似乎是主观的,可能会被关闭.请不要关闭它.我不是在寻找主观意见,而是寻找具体的编码情况,其中IM + FPIM明显优于FMIF.

非常感谢.

python python-import

67
推荐指数
4
解决办法
3974
查看次数

何时或为何在Python中使用相对导入

是否有关于何时在Python中使用相对导入的规则或指南?我在Flask Web框架中一直看到它们一直在使用.在搜索这个主题时,我只看到有关如何使用相对导入的文章,但不是为什么.

使用时有一些特殊的好处:

from . import x
Run Code Online (Sandbox Code Playgroud)

而不是:

from package import x
Run Code Online (Sandbox Code Playgroud)

此外,我注意到在这个问题上,答案提到相对进口是不受欢迎的.然而人们仍然继续使用它们.

python import module package

21
推荐指数
1
解决办法
6677
查看次数

Python - 从子文件夹执行绝对导入

基本上我问这个问题同样的问题:如何在Python中进行相对导入?

但没有人给他一个正确的答案.鉴于你在一个子文件夹中,你想要上一个目录,然后进入另一个子文件夹,做他们建议的不起作用(正如OP在他的评论中指出的那样).

我知道你可以通过使用sys.path来做到这一点,但我更喜欢一个更干净的方法.

例:

App
__init__.py
Package_A
--__init__.py
--Module_A.py
Package_B
--__init__.py
--Module_B.py
Run Code Online (Sandbox Code Playgroud)

如何将Module_A导入Module_B?

python python-import

12
推荐指数
1
解决办法
7932
查看次数

py.test - 在不同目录中收集 2 个 conftest.py 时出错

我们使用py.test。我们尝试将不同的conftest.py文件放在不同的文件夹中以拆分我们的灯具:

tests/api/
??? conftest.py
??? folder1
?   ??? conftest.py
??? folder2
?   ??? conftest.py
Run Code Online (Sandbox Code Playgroud)

但是当运行测试时会出现这个错误:

____ ERROR collecting api/folder1/conftest.py ____
import file mismatch:
imported module 'conftest' has this __file__ attribute:
  /tests/api/folder2/conftest.py
which is not the same as the test file we want to collect:
  /tests/api/folder1/conftest.py
HINT: remove __pycache__ / .pyc files and/or use a unique basename for your test file modules
Run Code Online (Sandbox Code Playgroud)

这是为什么?怎么修?

附注。删除__pycache__.pyc没有帮助。

聚苯乙烯。__init__.py每个文件夹中已经存在文件。

python pytest

5
推荐指数
1
解决办法
2593
查看次数