如何正确调用Python其他目录中定义的函数?

时间:2019-05-23 20:55:24

标签: python module python-import subdirectory

抱歉,已经确定的答案,但是我找不到我的问题的答案...我想使两个单独的脚本可调用。让我用一个例子来详细解释。

我的目录结构与此类似:

maindir
|- subdir
|   |- script.py
|   `- myfunc.py
`- main.py

具有以下内容:

myfunc.py中有

def myverynicefunc():
    print('Hello, I am your very nice func :)')

script.py中有

import myfunc

def scriptfunc():
    print('I am the script function :)')

myfunc.myverynicefunc()

main.py中有

from subdir.script import scriptfunc

scriptfunc()

如果我进入subdir目录并执行它可以运行的脚本,我的意思是:

.../main_dir/subdir$ python3 script.py 
Hello, I am your very nice func :)

但是,如果我尝试执行main.py脚本,它将失败:

.../main_dir$ python3 main.py 
Traceback (most recent call last):
  File "main.py", line 1, in <module>
    from subdir.script import scriptfunc
  File "/home/alf/Escritorio/main_dir/subdir/script.py", line 1, in <module>
    import myfunc
ModuleNotFoundError: No module named 'myfunc'

如果我将script.py的内容修改为

from . import myfunc

def scriptfunc():
    print('I am the script function :)')

myfunc.myverynicefunc()

现在情况正好相反,main.py脚本可以正常工作:

.../main_dir$ python3 main.py 
Hello, I am your very nice func :)
I am the script function :)

但是script.py脚本失败:

.../main_dir/subdir$ python3 script.py 
Traceback (most recent call last):
  File "script.py", line 1, in <module>
    from . import myfunc
ImportError: cannot import name 'myfunc'

是否可以同时拨打main.pyscript.py的电话?

2 个答案:

答案 0 :(得分:1)

在您的script.py-

中尝试一下
import sys
current_path = sys.path[0]
if current_path.split('/')[-1] != 'subdir':
    sys.path.insert(0, current_path+'/subdir/')
    import myfunc

通过这种方式,如果python的当前目录是文件的父目录,即maindir,它将更改目录的路径,然后将其导入。

有了它,它应该在两种情况下都可以工作。希望这可以帮助。 :)

答案 1 :(得分:0)

在第二种情况下,您可以执行 python3 -c“ import subdir.script”在您的主目录中