首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Python中正确调用其他目录中定义的函数?

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

Stack Overflow用户
提问于 2019-05-24 04:55:24
回答 2查看 462关注 0票数 0

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

我有一个类似于下面的目录结构:

代码语言:javascript
复制
maindir
|- subdir
|   |- script.py
|   `- myfunc.py
`- main.py

内容如下:

myfunc.py中,有

代码语言:javascript
复制
def myverynicefunc():
    print('Hello, I am your very nice func :)')

script.py中,有

代码语言:javascript
复制
import myfunc

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

myfunc.myverynicefunc()

main.py中,有

代码语言:javascript
复制
from subdir.script import scriptfunc

scriptfunc()

如果我转到subdir目录并执行脚本,我的意思是:

代码语言:javascript
复制
.../main_dir/subdir$ python3 script.py 
Hello, I am your very nice func :)

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

代码语言:javascript
复制
.../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的内容修改为

代码语言:javascript
复制
from . import myfunc

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

myfunc.myverynicefunc()

现在情况正好相反,main.py脚本运行正常:

代码语言:javascript
复制
.../main_dir$ python3 main.py 
Hello, I am your very nice func :)
I am the script function :)

但是script.py脚本失败了:

代码语言:javascript
复制
.../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才能正常工作?

EN

回答 2

Stack Overflow用户

发布于 2019-05-24 05:48:26

在你的script.py中试试这个--

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2019-05-24 05:42:11

在第二个场景中,您可以在主目录中导入“python3 subdir.script”

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56282813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档