eer*_*rne 70 python python-import
首先关闭所有:对不起,我知道有很多关于相关进口的问题,但我没有找到解决方案.如果可能,我想使用以下目录布局:
myClass/
__init__.py
test/
demo.py
benchmark.py
specs.py
src/
__init__.py
myClass.py
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:
包中的测试文件如何正确导入myClass.py?
如果你将libC/myClass中的myClass作为子模块或者包含/ myClass,你将如何从外部导入包?
到目前为止,我找不到一个优雅的解决方案.根据我的理解,Guido的决定应该可以做,from ..src import myClass
但这会出错:
ValueError: Attempted relative import in non-package
看起来它不会将myClass视为包.阅读文档:
需要__init__.py文件才能使Python将目录视为包含包;
我似乎缺少一些指定包的脚本的东西,我应该使用.pth吗?
Dan*_*uev 42
ValueError: Attempted relative import in non-package
表示您尝试在非包的模块中使用相对导入.它的问题与具有此from ... import
语句的文件有关,而不是您尝试导入的文件.
因此,例如,如果您在测试中进行相对导入,则应将测试作为包的一部分.这意味着
__init__.py
到测试/如果你运行的东西python myClass/test/demo.py
,相对导入也不会工作,因为你运行演示模块不是作为包.相对导入要求使用它们的模块本身作为包模块from myClass.test.demo import blabla
或相对导入导入.
Sev*_*325 27
昨晚经过几个小时的搜索,我找到了python相对进口的答案!! 或者至少是一个简单的解决方案.解决此问题的最佳方法是从另一个模块调用模块.所以说你要demo.py
导入myClass.py
.在myClass
子包的根目录下的文件夹中,他们需要有一个调用其他两个文件的文件.从我收集的工作目录始终考虑__main__
如此,如果您demo.py
使用demo.py
脚本测试导入,您将收到该错误.为了显示:
文件夹层次:
myClass/
main.py #arbitrary name, can be anything
test/
__init__.py
demo.py
src/
__init__.py
myClass.py
Run Code Online (Sandbox Code Playgroud)
myClass.py:
def randomMaths(x):
a = x * 2
y = x * a
return y
Run Code Online (Sandbox Code Playgroud)
demo.py:
from ..src import myClass
def printer():
print(myClass.randomMaths(42))
Run Code Online (Sandbox Code Playgroud)
main.py:
import test.demo
demo.printer()
Run Code Online (Sandbox Code Playgroud)
如果您demo.py
在解释器中运行,则会生成错误,但main.py
不会运行.这有点令人费解,但它有效:D
归档时间: |
|
查看次数: |
61933 次 |
最近记录: |