Python 相对导入

4

我正在尝试在Python中进行相对导入。但我无法理解其语法,每次在这里搜索它时,都无法得到答案:

这是我的文件夹结构:

Root
    libraries
        mylibrary
        __init__
    projects
        project
            myproject.py

我想使用相对路径导入'mylibrary',怎么写语法呢?


你想从哪里导入 mylibrary?我猜是从 myproject.py - Chris
3个回答

3
相对导入存在一个令人遗憾的混淆源。当你第一次了解它们时,你会认为它们允许你使用相对路径引用将要被导入的单个文件。实际上,它们只允许你在包内使用相对路径。这意味着包内的某些模块可以在需要从同一包中导入其他模块时使用相对导入语法。
在你的例子中,myproject.py不在与mylibrary相同的包中,事实上也没有任何包,所以无法从myproject.py内部使用相对导入。在那种情况下,相对导入就不适用。
有几件事情可以做来获得你想要的效果。其中一种方法是将你的库放在系统site-packages目录的子目录中。另一种方法是在系统site-package目录中放置.PTH文件,这些.PTH文件包含存储你的库的位置的路径。另一种方法是使用PYTHONPATH指向存储库的目录。

谢谢提供信息,或许这可以解释我遇到的错误。 :/ - Evandro Silva

3
您需要将该目录添加到Python路径中。
import sys
sys.path.append("/libraries") 

但是我认为最好的做法是将需要的库放在项目文件夹中,或者直接安装到已经在sys.path中的标准位置之一。


抱歉,我刚开始学习Python,但是我想轻松地在多个项目中使用我的“库”,而不必每次创建项目时复制/粘贴它们,也不想将它们放入PYTHONPATH中,因为当我需要重新分发它们时,我需要去C:\python并从那里提取。 - Evandro Silva
没问题。这很好,我同意如果你自己编写了库并且必须修改它们,那么这可能是更好的选择。否则,我仍然倾向于安装它们。 - camelNeck

3

我认为简单的import语句无法完成此操作。我会将库文件夹的相对路径附加到sys.path中,如下所示:

import sys
sys.path.append('../../')
from libraries import mylibrary

请注意,只有在从 projects/project 目录启动 python 解释器时才有效。

那么,如果我想要在多个项目中重复使用我的函数和类,而不需要复制/粘贴和PYTHONPATH,我该怎么做? - Evandro Silva
2
那么我猜你唯一的选择就是将它们安装在标准位置。了解一下distutils,对于纯Python包来说使用起来非常简单。 - silvado

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接