相关疑难解决方法(0)

如何在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万
查看次数

ModuleNotFoundError:没有名为'__main __.xxxx'的模块; '__main__'不是包

目前正在尝试使用Python3并使用绝对导入将一个模块导入另一个模块但我收到错误ModuleNotFoundError: No module named '__main__.moduleB'; '__main__' is not a package.考虑这个项目结构:

proj
    __init__.py3 (empty)
    moduleA.py3
    moduleB.py3
Run Code Online (Sandbox Code Playgroud)

moduleA.py3

from .moduleB import ModuleB
ModuleB.hello()
Run Code Online (Sandbox Code Playgroud)

moduleB.py3

class ModuleB:
    def hello():
        print("hello world")
Run Code Online (Sandbox Code Playgroud)

然后运行python3 moduleA.py3给出错误.这里有什么需要改变的?

谢谢!

import module python-3.x

46
推荐指数
3
解决办法
5万
查看次数

如何使用 pytest 解决 ImportError

已经 有人对此主题提出疑问有时程序员会__init__.py在某些地方放置一些路径,通常有人说应该使用绝对路径。但是,我无法让它在这里工作:

\n

如何从包中导入类以便 pytest 中的测试运行并可以使用代码?

\n

目前我得到 pytest 或通过各自运行的代码。

\n

我的示例项目结构是

\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 testingonly\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 cli.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 testingonly.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tests\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test_testingonly.py\n
Run Code Online (Sandbox Code Playgroud)\n

__init__.py在这两种情况下都是空文件。

\n
$ cat testingonly/cli.py\n"""Console script for testingonly."""\nfrom testingonly import Tester\n\ndef main(args=None):\n    """Console script for testingonly."""\n    te = Tester()\n    return 0\n\nmain()\n
Run Code Online (Sandbox Code Playgroud)\n
$ cat testingonly/testingonly.py\n"""Main module."""\nclass Tester():\n    def __init__(self):\n        print("Hello")\n
Run Code Online (Sandbox Code Playgroud)\n

正如预期的那样:

\n
$ python3 testingonly/cli.py\nHello\n
Run Code Online (Sandbox Code Playgroud)\n

然而,尝试测试这一点失败了:

\n
$ pytest\n========================================================= test session starts =========================================================\nplatform linux -- …
Run Code Online (Sandbox Code Playgroud)

python python-import pytest

8
推荐指数
1
解决办法
2万
查看次数

Python 3 - 在同一目录中导入.py文件 - ModuleNotFoundError:没有名为'__main __.char'的模块; '__main__'不是包

我在Windows 10上使用Python 3.6.我在同一目录中有2个.py文件char.py,并且char_user.py,如下所示:

char.py:

# char.py

import cv2

#######################################################################################################################
class Char:

    # constructor #####################################################################################################
    def __init__(self):
        self.contour = None
        self.centerOfMassX = None
        self.centerOfMassY = None
    # end def

# end class
Run Code Online (Sandbox Code Playgroud)

char_user.py:

# char_user.py

import os
import cv2

# I've tried this various ways, see more comments below
from .char import Char

#######################################################################################################################
def main():

    char = Char()

    char.centerOfMassX = 0
    char.centerOfMassY = 0

    print("finished main() without error")
# end main

#######################################################################################################################
if __name__ == "__main__": …
Run Code Online (Sandbox Code Playgroud)

python python-3.x

6
推荐指数
2
解决办法
9057
查看次数

没有名为'__main __。demo'的模块;'__main__'不是python3软件包

如果我执行main.py正常,问题出在我执行时demo2.py

|myPackage
   |subPackage
      demo.py
      demo2.py
   main.py
Run Code Online (Sandbox Code Playgroud)

main.py

from ludikDriver.demo2 import demo2_print

demo2_print()
Run Code Online (Sandbox Code Playgroud)

demo2.py

from .demo import demoprint

def demo2_print():
    print("demo2")
    demoprint()

demo2_print()
Run Code Online (Sandbox Code Playgroud)

演示

def demoprint():
    print("demo")
Run Code Online (Sandbox Code Playgroud)

错误: from .demo import demoprint

ModuleNotFoundError: No module named '__main__.demo'; '__main__' is not a package
Run Code Online (Sandbox Code Playgroud)

我应该有__init__.py吗?

python-3.x python-3.6

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