当前位置: 首页>>技术教程>>正文


如何将Python模块添加到syspath?

,

问题描述

嗨我有这样的文件结构

Folder
   Common
      foo1.py
   TestFolder
      foo2.py

我想导入foo2.py foo1.py.我试过但它在Ubuntu上不起作用:

sys.path.append(os.path.abspath('../../'))
from Common import foo1.py

最佳解决思路

python如何找到它的模块

严格来说,一个模块是一个python文件,而一个包是一个包含python文件的文件夹,附有一个名为__init__.py的(可以是空的)文件,告诉python它是一个从中导入模块的包。在这两种情况下,模块都需要它们的.py扩展,但是导入它们是没有的(见下文)。

默认情况下,Python在$PYTHONPATH中查找其模块和包。

要找出$ PYTHONPATH中包含的内容,请在python(3)中运行以下代码:

import sys
print(sys.path)

如何添加目录

偶尔

在python文件中,您可以通过在python应用程序或脚本的head部分添加以下行来偶尔将路径添加到默认路径:

import sys
sys.path.insert(0, "/path/to/your/package_or_module")

例如:

如果我有一个文件夹:/home/myname/pythonfiles,我想导入位于该目录中的文件module_1.py,我将其添加到我的代码的head部分:

import sys
sys.path.insert(0, "/home/myname/pythonfiles")

我只需通过以下方式导入文件module_1.py

import module_1

当我创建一个包并想要从包中导入模块时,我需要在$PYTHONPATH中创建一个包含模块的文件夹,并附带一个名为__init__.py的(可以为空)文件

例如:

要从/home/myname/pythonfiles中名为my_package的包(文件夹)导入,请将/home/myname/pythonfiles路径添加到$PYTHONPATH,如示例1所示,并导入名为module_2.py的模块(在包文件夹内),只需:

from <packagename> import module_2

永久地将目录添加到$PYTHONPATH

将以下行添加到~/.profile文件中。

export PYTHONPATH=$PYTHONPATH:/path/you/want/to/add

子目录

在包中,子目录不包括在内;你需要”chain”目录。要导入模块module_3.py,文件夹packagename内的文件夹subfolder

import packagename.subfolder.module_3

鉴于包中的所有子文件夹都包含自己的__init__.py文件。

当模块与脚本或应用程序位于同一目录中时

当模块与脚本或应用程序位于同一目录中时,无需插入模块的路径,它会自动添加。

例:

如果我有一个包含script.pymodule.py的文件夹,我只需通过以下方式导入模块:

import module

次佳解决思路

使用相对导入的正确方法是:

from ..Common import foo1

而且您还需要在所有文件夹中使用__init__.py

第三种解决思路

注意:对于最新版本的python 3,这个答案已经过时了,但这里的版本是早期版本。有关更多信息,请阅读注释和https://www.python.org/dev/peps/pep-0420/


基本上每个要添加到syspath的python代码文件夹都需要一个__init__.py文件。这些__init__.py文件可以为空。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/2541.html,未经允许,请勿转载。