从不同目录调用文件时如何指定导入路径?

时间:2018-04-19 17:58:34

标签: python python-3.x import python-import

我正面临与导入路径相关的问题。我有一个库文件(func_a.py)如下。从不同的目录调用此文件。在这种情况下,如何在client.py中指定导入路径?

.
├── main.py
└── package_a
    ├── __init__.py
    ├── client.py
    └── func_a.py

代码如下:

$ cat package_a/func_a.py                                                                                                                                                                                                                        
def something():
    print('something')

$ cat package_a/client.py                                                                                                                                                                                                                       
import func_a

func_a.something()

$ cat main.py                                                                                                                                                                                                                                    import package_a.func_a as func_a
import package_a.client as client

func_a.something()

这是错误。当我调用client.py时,文件错过了func_a.py,因为当前目录是root,而不是package_a /。

$ python main.py                                                                                                                                                                                                                                     Traceback (most recent call last):
  File "main.py", line 2, in <module>
    import package_a.client as client
  File "/home/jef/work/test/package_a/client.py", line 1, in <module>
    import func_a
ModuleNotFoundError: No module named 'func_a'

我的python是3.6。谢谢你的帮助。

更新

虽然调用main.py是正常的,但调用client.py失败了。我做了两件事。

$ cat client.py
from package_a import func_a

func_a.something()

$ python client.py        
Traceback (most recent call last):
  File "client.py", line 2, in <module>
    from package_a import func_a
ModuleNotFoundError: No module named 'package_a'

1 个答案:

答案 0 :(得分:0)

$ cat package_a/client.py
import func_a

^此导入语句不正确。要从func_a包导入package_a模块,请改用以下导入语句:

from package_a import func_a

您需要确保package_a中显示包含sys.path的目录。