python:在包中找不到模块

Luc*_*uca 1 python python-import

我正在创建一个具有以下目录结构的python项目:

demos
   demo1.py
kernels
   rbf.py
   ___init__.py
Run Code Online (Sandbox Code Playgroud)

该文件rbf.py定义了一个名为的类RBF.将__init__.py在文件kernels目录中包含以下行:

from .rbf import *
Run Code Online (Sandbox Code Playgroud)

现在demo1.py包含以下导入:

from kernels import RBF
Run Code Online (Sandbox Code Playgroud)

然而,这失败了

ImportError: No module named kernels
Run Code Online (Sandbox Code Playgroud)

因此该demos文件夹看不到kernels包目录.我不知道如何做到这一点.

Ana*_*mar 7

您应该将父目录添加kernels到任一PYTHONPATH环境变量或直接添加到sys.pathPython以便能够找到该包kernels.

修改的实施例sys.pathdemo1.py,假设两个demokernels具有相同的父目录-

import os, os.path
import sys
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__),'..')))
from kernels import RBF
Run Code Online (Sandbox Code Playgroud)

以上是做什么的 -

__file__ 获取脚本的路径

os.path.dirname(__file__) - 获取包含该文件的目录的路径.

os.path.join()- 创建路径,如 - /path/to/demos/..- 取决于操作系统.

os.path.abspath - 从中​​获取父目录的绝对路径 /path/to/demos/..