【问题标题】:Importing from local directory in python从python中的本地目录导入
【发布时间】:2018-11-06 06:54:18
【问题描述】:

对于以下情况为什么会发生错误,我有点困惑:

我得到了以下项目:

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

【问题讨论】:

    标签: python pyspark apache-zeppelin


    【解决方案1】:

    您可能在file1.py 的开头有import file2 语句。如果你想import file1,它会加载整个模块,但由于你只导入一个函数 - 你错过了依赖。

    您可以通过import file1 或在function1 定义的开头添加import file2 语句来修复它。例如,

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

    【讨论】:

    • 我希望这会起作用。仍然有同样的错误。
    • 你得到同样的错误?不是一个不同的吗?如果必须的话,拥有这样的依赖关系不是一个好的设计 - 导入整个模块并使用完整路径访问您的函数:file2.function1()。至少为了测试,看看它是否有效。
    • 我有权单独运行import file2; file2.function2()。但是在尝试运行取决于file2.function2()file1.function1() 时仍然出现此错误。我通过询问我是否使用 apache-zeppelin 来更新我的问题。
    【解决方案2】:

    你可以这样做:

    file1.py:

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

    file2.py:

    import file1 as f
    def get_hello():
        return f.hello()
    

    【讨论】:

      猜你喜欢
      • 2017-02-26
      • 2016-05-31
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 2013-11-09
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      相关资源
      最近更新 更多