从python中的本地目录导入

时间:2018-05-27 15:05:41

标签: python pyspark apache-zeppelin

我对以下情况发生错误的原因感到有点困惑:

我得到了以下项目:

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

2 个答案:

答案 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()