什么是__init__.py一个Python源目录?
我正在尝试构建一个新包,但是,当我尝试从 VSCode 内部或终端运行任何文件时,我遇到了以下错误:
ModuleNotFoundError: No module name 'x'
Run Code Online (Sandbox Code Playgroud)
我当前的文件夹结构如下:
package
|---module
|------__init__.py
|------calculations.py
|------miscfuncs.py
|---tests
|------__init__.py
|------test_calcs.py
|---setup.py
|---requirements.txt
Run Code Online (Sandbox Code Playgroud)
但是,当我通过 VSCode 并在 test_calcs.py 中使用import module.calculations as calc或运行测试(PyTest)时from module.calculations import Class,测试按预期工作 - 这让我感到困惑。
我知道这是一个常见问题,但我无法找出适用于此的解决方案。
我尝试使用下面的代码检查工作目录是否在系统路径中。返回的目录列表中的第一项是我正在使用的目录。
import sys
print(sys.path)
Run Code Online (Sandbox Code Playgroud)
我还在文件中使用了以下内容但无济于事:
import module.calculations
import .module.calculations
from . import miscfuncs
Run Code Online (Sandbox Code Playgroud)
尝试时import .module.calculations,我得到以下信息:
ModuleNotFoundError: No module named '__main__.module'; '__main__' is not a package
Run Code Online (Sandbox Code Playgroud)
当尝试from . import miscfuncs在calculations.py中时,我收到以下错误:
ImportError: cannot import name 'miscfuncs'
Run Code Online (Sandbox Code Playgroud)
当处理模块文件夹中的文件时,我可以使用相对导入:import calculations并且它工作得很好。这对于模块内的文件来说很好,但当我在 test_calcs.py …
我已经浏览并发现了很多问题和很多答案,但似乎没有任何问题。
我设置了两个文件config.py和test.py名为test一个文件夹下。
配置包括代码:
class Config:
def __init__(self, name):
self.name = name
Run Code Online (Sandbox Code Playgroud)
而测试有:
try:
# Trying to find module in the parent package
from . import config
print(config.debug)
del config
except ImportError:
print('Relative import failed')
try:
# Trying to find module on sys.path
import config
print(config.debug)
except ModuleNotFoundError:
print('Absolute import failed')
Run Code Online (Sandbox Code Playgroud)
这已根据此堆栈答案的答案供应商汇总在一起。
不幸的是,我同时出现了两个错误,当我尝试直接调用它时,from config import Config我得到 ModuleNotFoundError
我真的对这个迷失了方向,不知道从哪里开始。
使用 Python 3.6,atom.io 作为我的 IDE。
我想从子文件夹中的文件调用函数.我宁愿做静态的.我使用空__init__.py文件,因为我已经读过,在简单的情况下,它们可能是空的(我的可能不是更简单),或者从3.5开始,我根本不需要它们.但我愿意填补它们.
我有以下文件结构:
test
??? callfoo.py (main)
??? __init__.py (empty)
??? folder
??? submodule.py
??? __init__.py (empty)
Run Code Online (Sandbox Code Playgroud)
callfoo.py:
#import statement wanted
def main():
foo()
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
submodule.py
def foo():
print('foo')
Run Code Online (Sandbox Code Playgroud)
对于我尝试过的import语句:
import test.folder.submodule
from test.folder import submodule
from test.folder.submodule import foo
每一个导致ModuleNotFoundError: No module named 'test.folder'
我在这里有点困惑,因为它们是直接从文档中获取的
import .folder.submodule- > invalid syntax
importlib.import_module('test.folder.submodule')
ModuleNotFoundError:没有名为'test.folder'的模块
这有效:
import importlib.util
spec = importlib.util.spec_from_file_location("submodule", "/home/.../test/folder/submodule.py")
foo = importlib.util.module_from_spec(spec)
spec.loader.exec_module(foo)
Run Code Online (Sandbox Code Playgroud)
但我真的不想动态地这样做,特别是对于几个文件.
这个ModuleNotFoundError:没有名为x的模块处理我的错误消息,但是根据我的判断,它没有处理子文件夹(对于我来说,submodule.py它在同一级别上工作正常callfoo.py) …
我正在尝试运行我到这里的这段代码:
from tkinter import *
import tkSimpleDialog
import tkMessageBox
root = Tk()
w = Label(root, text= "My Program")
w.pack()
tkMessageBox.showinfo("Welcome", "Add welcome message here")
Run Code Online (Sandbox Code Playgroud)
但是 发生了这个错误:
我已经在这里查看ModuleNotFoundError: No module named x,但我无法理解答案。我对这些东西还是陌生的。