我有一个python应用程序具有以下目录结构:
src
|
+---- main
|
+---- util
|
+---- gen_py
|
+---- lib
Run Code Online (Sandbox Code Playgroud)
在包main中,我有一个名为MyServer.py的python模块,它有一个import语句,如:
from gen_py.lib import MyService
Run Code Online (Sandbox Code Playgroud)
为了使这个语句起作用,我将以下行放在MyServer.py的开头:
import sys
sys.path.append('../gen_py/lib')
Run Code Online (Sandbox Code Playgroud)
当我在终端中运行MyServer.py时,出现以下错误:
ImportError:没有名为gen_py.lib的模块
我在这里缺少什么?
phi*_*hag 78
您的修改sys.path
假定当前工作目录始终在main/
.不是这种情况.相反,只需将父目录添加到sys.path
:
import sys
import os.path
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
import gen_py.lib
Run Code Online (Sandbox Code Playgroud)
不要忘记__init__.py
在gen_py和lib中包含一个文件- 否则,它们将不会被识别为Python模块.
要使Python模块导入起作用,您的路径中必须有"src",而不是"gen_py/lib".
处理类似导入时import gen_py.lib
,它会查找模块gen_py
,然后查找子模块lib
.
由于模块gen_py
不在"../gen_py/lib"中(它将在".."中),因此您添加的路径将无助于导入过程.
根据您运行它的位置,尝试添加"src"文件夹的相对路径.也许是的sys.path.append('..')
.您也可以通过相对路径直接在src文件夹中运行脚本python main/MyServer.py
from ..gen_py.lib import MyService
Run Code Online (Sandbox Code Playgroud)
要么
from main.gen_py.lib import MyService
Run Code Online (Sandbox Code Playgroud)
确保__init__.py
每个目录上都有一个(至少为空)文件.
归档时间: |
|
查看次数: |
166501 次 |
最近记录: |