我对以下情况发生错误的原因感到有点困惑:
我得到了以下项目:
home/projects/project1
和
user:home/projects/project1$ ls
file1.py
file2.py
__init__.py
data
其中data是包含某些文件的文件夹。
我做了以下事情:
from os import path
import sys
sys.path.append(path.abspath('/home/projects/project1'))
from file1 import function1
有效。
import file2
也可以正常工作。
file1
不同于file2
的某些功能。例如file1
以:
from file2 import function2
所以当我打电话时:
res = function1(some_input)
我收到以下错误:
File "/home/dimitris/spark-2.1.0-bin-hadoop2.7/python/lib/pyspark.zip/pyspark/serializers.py", line 434, in loads
return pickle.loads(obj)
ImportError: No module named file2
为什么会这样?
修改
不确定它是否相关,但我正在制作此模块并尝试在apache-zeppelin笔记本中导入它以在那里使用它们。而且我在哪里得到错误。
似乎它可能与此问题有关:Pyspark --py-files doesn't work
答案 0 :(得分:1)
您可能在import file2
的开头有file1.py
语句。如果你import file1
,它会加载整个模块,但由于你只导入一个函数 - 你会错过依赖。
您可以import file1
或在import file2
定义的开头添加function1
语句来修复它。例如,
# file1.py
def function1(some_input):
import file2
.. your code ..
答案 1 :(得分:0)
你可以这样做:
file1.py:
def hello():
print('hello from file1')
file2.py:
import file1 as f
def get_hello():
return f.hello()