我想从同一目录中的另一个文件导入一个函数.
有时它适用于我,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)
我不明白这里的逻辑,我找不到任何解释.这看起来完全随机.
有人可以向我解释这一切背后的逻辑是什么吗?
Set_up:我有一个.py文件,用于我需要在程序中使用的每个函数.
在这个程序中,我需要从外部文件调用该函数.
我试过了:
from file.py import function(a,b)
Run Code Online (Sandbox Code Playgroud)
但我得到错误:
ImportError:没有名为'file.py'的模块; 文件不是包
我该如何解决这个问题?
I have the following directory structure:
py_test
??? __init__.py
??? dir1
? ??? __init__.py
? ??? script1.py
??? dir2
??? __init__.py
??? script2.py
Run Code Online (Sandbox Code Playgroud)
In script2 I want to "import ..\script1".
What I tried in script2:
Does not work
from ..dir1 import script1
ImportError: attempted relative import with no known parent package`
Run Code Online (Sandbox Code Playgroud)Works
import sys, os
path2add = os.path.normpath(os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir, 'dir1')))
if (not (path2add in sys.path)) :
sys.path.append(path2add)
Run Code Online (Sandbox Code Playgroud)If I want to go with option 1, what is …
我有一个简单的项目结构,其中大部分是空的 python 文件,以便测试在线教程中的概念:
project
|--package1
| |--__init__.py
| |--module1.py
|
|--package2
| |--__init__.py
| |--module2.py
|
|--__init__.py
Run Code Online (Sandbox Code Playgroud)
模块1.py:
from .package2.module2 import function2
Run Code Online (Sandbox Code Playgroud)
模块2.py:
def function2():
return 0
Run Code Online (Sandbox Code Playgroud)
直接运行 module1.py 会出现此错误:
Traceback (most recent call last):
File "c:\"blahblahblah"\project\package1\module1.py", line 1, in <module>
from .package2.module2 import function2
ImportError: attempted relative import with no known parent package
Run Code Online (Sandbox Code Playgroud)
我尝试通过将 module2.py 放入项目文件夹本身并修改导入来降低问题的复杂性,因为我的教程建议它可以工作(来自 .module2 import function2),但这会产生相同的错误。
旁注:我的印象是 init 文件对于我的 python 版本来说是不必要的,但我添加了它们以覆盖我的所有基础。
Python版本3.9.1
任何提示将不胜感激。
我的项目中的导入有问题。
我的目录结构如下:
base_directory
- examples
- src
- folder_1
- __init__.py
- file.py
- folder_2
- __init__.py
- class1.py
- class2.py
- class3.py
- class4.py
Run Code Online (Sandbox Code Playgroud)
在file.py我尝试:from ..folder2.class1 import Class1然后,我收到错误:
导入错误:尝试在没有已知父包的情况下进行相对导入
在folder2/__init__.py我做了我在 Python 中制作包的教程中看到的内容:
from class1 import Class1
my_class_1 = Class1()
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切都奏效了。我该怎么办?我使用 Python 3.7.5
谢谢。
我的项目有以下结构
Object_Detection/
setup.py
setup.cfg
requirement.txt
object_detection/
models
__init__.py #contains from . import models
tests/
# inside tests dir
test_utils_image.py
__init__.py #empty
utils/
# inside utils dir
__init__.py #inside
utils_image_preprocess.py
utils_image.py
utils_tfrecord.py
Run Code Online (Sandbox Code Playgroud)
现在utils 目录中的init .py 包含以下代码。
# inside __init__.py
from . import utils_image_preprocess
from . import utils_image
from . import utils_tfrecord
Run Code Online (Sandbox Code Playgroud)
在init .py 文件之上运行会出现错误:
ImportError: attempted relative import with no known parent package
Run Code Online (Sandbox Code Playgroud)
测试目录中的 test_utils.py 包含以下代码
# inside test_utils.py
from object_detection.utils import utils_image
Run Code Online (Sandbox Code Playgroud)
运行 test_utils.py 时出现以下错误
ImportError: cannot import name …Run Code Online (Sandbox Code Playgroud)