Python3.6在目录外运行脚本时导入错误。在同一目录中正确运行

Python3.6在目录外运行脚本时导入错误。在同一目录中正确运行,python,python-3.x,Python,Python 3.x,我有以下设置 ~/python/pyct/lib/ ├── printer.py └── utils.py ~/apps/proj/ └── main.py ~/python/pyct/lib/utils.py ~/python/pyct/lib/printer.py ~/apps/proj/main.py PYTHONPATH的值=$HOME/python 当我在~/python/pyct/lib/内的文件中导入printer.py时,一切都按预期运行 从~/apps/proj/运行mai

我有以下设置

~/python/pyct/lib/
├── printer.py
└── utils.py

~/apps/proj/
└── main.py
~/python/pyct/lib/utils.py

~/python/pyct/lib/printer.py

~/apps/proj/main.py

PYTHONPATH的值=$HOME/python

当我在~/python/pyct/lib/内的文件中导入printer.py时,一切都按预期运行

从~/apps/proj/运行main.py时,出现以下错误:

 Traceback (most recent call last):
  File "main.py", line 1, in <module>
    from pyct.lib.printer import printer
  File "~/python/pyct/lib/printer.py", line 1, in <module>
    import utils
ModuleNotFoundError: No module named 'utils'
我尝试过使用相对导入,但不起作用。我已经使用了资源,但可以让场景正常工作

我知道在导入中使用绝对路径可以解决这个问题,但是我想用多个python文件创建一个目录,它将充当一个库。然后在目录之外的其他地方使用核心组件

我如何才能实现上述场景的工作。 了解python导入的任何资源都将非常有用

这里的问题是~/python/pyct/lib/printer.py在其工作目录中查找名为utils的模块,而不是在其自身所在的目录中

您可以在~/python/pyct/lib/printer.py中使用相对导入:


python随后将查找与导入模块路径相关的模块,而不是工作目录。

谢谢。这很有魅力。我忽略了这样导入模块。我过去只使用from语句导入函数/类。
import utils  # this breaks sometimes
# import pyct.lib.utils as utils # this works always

def printer(content):
    utils.printFunc(content)
from pyct.lib.printer import printer
printer("hi")
 Traceback (most recent call last):
  File "main.py", line 1, in <module>
    from pyct.lib.printer import printer
  File "~/python/pyct/lib/printer.py", line 1, in <module>
    import utils
ModuleNotFoundError: No module named 'utils'
from . import utils