2012-06-02 55 views
4

我想在python中进行相对导入。但我不明白我在所以在这里寻找它的语法,每次,我不能得到答案:蟒蛇相对进口

这里是我的文件夹结构:

Root 
    libraries 
     mylibrary 
     __init__ 
    projects 
     project 
      myproject.py 

,我想导入“在MyLibrary '使用相对路径,这样做的语法是什么?

+0

你想从哪里导入'mylibrary'? 'myproject.py'我猜。 – Chris

+0

是的,来自myproject.py –

回答

3

你必须将目录添加到你的Python路径。

import sys 
sys.path.append("/libraries") 

但我认为这可能会更好要么把图书馆需要它,还是将它们安装到标准的地方之一,已经在sys.path中的项目的文件夹。

+0

对不起,我刚开始学习python,但是我想在多个项目中轻松使用我的'库',每次创建项目时都不需要复制/粘贴它们,而且我也没有想把它们放到PYTHONPATH中,因为当我需要重新分配它们时,我需要去C:\ python并从那里解压缩。 –

+0

没问题。这是非常好的,我同意这可能是更好的选择,如果你自己编写库并且必须修改它们。否则,我仍然赞成安装它们。 – camelNeck

3

我不认为这可以用简单的import声明来完成。我会做的是相对路径添加到库文件夹sys.path这样的:

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

请注意,这只有当你开始从projects/project目录Python解释器。

+0

那么我需要做什么来重复使用我的函数和类跨多个项目没有复制/粘贴和没有PYTHONPATH? –

+2

然后我想你唯一的选择就是把它们安装在标准的地方。阅读distutils,使用纯Python包非常简单。 – silvado

3

与相对进口有混淆的不幸来源。当你第一次了解它们时,你认为它们允许你使用一般相对的文件/目录路径来引用将被导入的单个文件。 (或者至少,我是这么认为的)。事实上,他们只允许你在包中使用相对路径。这意味着某个软件包中的某些模块在需要从同一个软件包中导入其他模块时可以使用相对导入语法。

在您的示例中,myproject.py与mylibrary不在同一个包中,实际上不在任何包中,因此无法从myproject.py中使用相对导入。相对进口只适用于这种情况。

有几件事你可以做得到你想要的效果。一种是将你的库放在系统site-packages目录的子目录中。另一种方法是将.PTH文件放入系统站点包目录中,这些.PTH文件包含存储库所在位置的路径。另一种方法是使用PYTHONPATH指向存储库的目录。

+0

感谢您的信息,也许这解释了我得到的错误。 :/ –