如何从python中的父文件夹导入函数?

时间:2016-04-14 11:49:09

标签: python python-3.x python-import

我需要在我的python项目上执行一个函数的导入。

我知道在SO上有几十个类似的问题,然而,不幸的是,我找不到合适的解决方案,因为答案要么太具体,要么太笼统,或者只是丑陋的黑客攻击(比如用绝对路径操作)。

以下是我的文件夹结构:

PythonClient:.
│   .gitignore
│   des.py
│   des_test.py
│   des_var2.py
│   gui.py
│   index.py
│   __init__.py
│
├───diffie_hellman
│   │   diffie_hellman.py
│   │   diffie_hellman_test.py
│   │   __init__.py
│   │
│   └───__pycache__
│           diffie_hellman.cpython-35.pyc
│
├───hashes
│   │   collision.py
│   │   hash_function.py
│   │   __init__.py
│   │
│   └───__pycache__
│           hash_function.cpython-35.pyc
│           __init__.cpython-35.pyc
│
└───__pycache__
        des.cpython-35.pyc
        des_var2.cpython-35.pyc

我需要从./hashes/hash_function.py导入./diffie_hellman/diffie_hellman.py

./hashes/hash_function.py文件包含唯一名为hash_function的函数。

我已经尝试了很多方法来执行导入,但却无法做到。 我总是得到

  

SystemError:父模块''未加载,无法执行相对   进口

我在导入语句中使用.(即from .hashes.hash_function

或者我明白了:

  

ImportError:没有名为'hashes'的模块

每个__init__.py文件都是空的。

以下是我的尝试列表:

  1. from hashes import hash_function

  2. from hashes.hash_function import hash_function

  3. from .hashes.hash_function import hash_function

  4. from ..hashes.hash_function import hash_function

  5. import hashes

  6. import hash_function

  7. from .. import hash_function

  8. from . import hash_function

  9. from PythonClient.hashes.hash_function import hash_function

  10. 您能帮我解决一下我的问题,并了解如何使用这些进口产品吗?

    PS:无法在stackoverflow.com/questions/14132789/

    找到解决方案

2 个答案:

答案 0 :(得分:2)

我知道你已经接受了答案,但是如果你想要一个更少的"永久性"解决方案(也就是说,如果您不想安装您的代码),另一个选择是简单地将PythonClient目录的父级添加到您的路径中。这可以永久完成(具体取决于操作系统)或临时代码:

import os
import sys

p = os.path.abspath('../..')
if p not in sys.path:
    sys.path.append(p)

from PythonClient.hashes.hash_function import hash_function

干杯!

答案 1 :(得分:1)

你有一个__init__.py的事实告诉我PythonClient本身就是一个库。做from PythonClient.hashes.hash_function import hash_function。我总是喜欢完全合格的路径。

您需要先安装库,然后才能从中导入。这需要主目录中的setup.py文件。之后,你应该pip安装你的库进行测试,例如`pip install -e。