抱歉,已经确定的答案,但是我找不到我的问题的答案...我想使两个单独的脚本可调用。让我用一个例子来详细解释。
我的目录结构与此类似:
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.py
和script.py
的电话?
答案 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”在您的主目录中