关于python:在另一个文件夹中导入一个类

Importing a class in another folder

我对python目录有问题。

我的结构如下:

  • Python
    • 模块
      • 算法
        • 密码器
          • 莫尔斯PY
    • 测验
      • 算法
        • 密码器
          • 测试莫尔斯PY

当我尝试在测试中导入模块时,我得到一个未找到模块的错误。我尝试导入如下内容:

1
2
3
4
parent_dir_name = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
sys.path.append(parent_dir_name +"/../../../")

from modules.algorithms.cyphers.morse import *

我在所有目录中也有init文件。我正在尝试运行以下测试:

1
> python -m unittest discover ./tests


习惯上使用相对进口产品

1
from ....modules.algorithms.ciphers.morse import *

这样可以确保导入正确的莫尔斯文件,否则会有导入已安装的名为莫尔斯的模块的风险。

这里有两个例子来说明相对导入,假设您有一个名为simulation.py的文件,其中有一行

1
from .animals import Herbivore

在里面。这将从与simulation.py文件位于同一目录中的文件导入草食动物类。

现在假设您是一个名为tests的文件夹,在这个文件夹中,您有一个名为test_animals.py的文件,其中有一行

1
from ..animals import Herbivore

这将从位于tests文件夹上方的文件夹中名为animals.py的文件导入草食动物类。

最后,请注意(至少对于Python3.6)不能运行使用相对导入的文件,只能导入它。


如果使用__init__.py将目录标记为模块,则只需通过

1
from modules.algorithms.cyphers import morse