如何将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
,请将/home/myname/pythonfiles
路径添加到$PYTHONPATH
,如示例1所示,并导入名为module_2.py
的模块(在包文件夹中) )只需:`
from import module_2
永久地将目录添加到$PYTHONPATH
:
~/.profile
下行添加到~/.profile
文件中。
export PYTHONPATH=$PYTHONPATH:/path/you/want/to/add
子目录
在包中,子目录不包括在内; 你需要“链接”目录。 要导入模块module_3.py
,文件夹packagename
文件module_3.py
文件subfolder
:
import packagename.subfolder.module_3
鉴于包中的所有子文件夹都包含自己的__init__.py
文件。
当模块与脚本或应用程序位于同一目录中时
当模块与脚本或应用程序位于同一目录中时,无需插入模块的路径,它会自动添加。
例:
如果我有一个包含script.py
和module.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文件可以为空。