Импорт из локального каталога в Python - PullRequest
0 голосов
/ 27 мая 2018

Меня немного смущает, почему ошибка возникает в следующем случае:

Я получил следующий проект:

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 не работает

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Вы можете сделать так:

file1.py:

def hello():
    print('hello from file1')

file2.py:

import file1 as f
def get_hello():
    return f.hello()
0 голосов
/ 27 мая 2018

Возможно, у вас есть оператор import file2 в начале file1.py.Если бы вы import file1, он загрузил бы весь модуль, но так как вы импортировали только функцию - вы пропустили зависимость.

Вы можете исправить это либо import file1, либо добавив оператор import file2 вначало function1 определения.Например,

# file1.py
def function1(some_input):
    import file2
    .. your code ..
...