wta*_*aga 5 python directory scripting
My directory structure:
r/
|___init__.py
|
|_d1/
| |___init__.py
| |_s1.py
|
|_d2/
|___init__.py
|_s2.py
Run Code Online (Sandbox Code Playgroud)
contents of s1.py:
a = 1
print(a)
Run Code Online (Sandbox Code Playgroud)
contents of s2.py:
from d1.s1 import a
print(2 * a)
Run Code Online (Sandbox Code Playgroud)
我导航到目录/r并执行python3 d1/s1.py. 终端打印1。当我执行时python3 d2/s2.py出现错误ImportError: No module named 'd1'。如何执行脚本s2?
当你说,
from d1.s1 import a
Run Code Online (Sandbox Code Playgroud)
Python 将首先查找名为 d1 的模块,然后在其中查找名为 s1 的模块,然后在其中查找名为 a 的对象(可能是常规 python 对象,或另一个模块)。
所以,
from d1.s1 import a
Run Code Online (Sandbox Code Playgroud)
可以通过几种不同的方式工作:
-- d1/
-- __init__.py
-- s1.py <-- contains a variable called "a"
Run Code Online (Sandbox Code Playgroud)
或者
- d1/
-- __init__.py
-- s1/
-- __init__.py
-- a.py
Run Code Online (Sandbox Code Playgroud)
或者
-- d1/
| -- __init__.py
-- s1/
-- __init__.py <-- contains a variable called "a"
Run Code Online (Sandbox Code Playgroud)
在您的情况下,init .py 仅当 d1 和 s1 和 s2 位于同一目录中时才有效。
如果要从另一个子目录 d1 导入模块 s1,请确保 d1 目录位于 sys 路径中。
将 d1 添加到 sys 路径
sys.path.append('path_to_directory/d1')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2255 次 |
| 最近记录: |