我需要在我的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
文件都是空的。
以下是我的尝试列表:
from hashes import hash_function
from hashes.hash_function import hash_function
from .hashes.hash_function import hash_function
from ..hashes.hash_function import hash_function
import hashes
import hash_function
from .. import hash_function
from . import hash_function
from PythonClient.hashes.hash_function import hash_function
您能帮我解决一下我的问题,并了解如何使用这些进口产品吗?
找到解决方案答案 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。