如何将 Python 模块添加到 syspath?

use*_*474 101 python

我有这样的文件结构:

Folder
   Common
      foo1.py
   TestFolder
      foo2.py
Run Code Online (Sandbox Code Playgroud)

我想导入foo2.pyfoo1.py。我试过了,但它在 Ubuntu 上不起作用:

sys.path.append(os.path.abspath('../../'))
from Common import foo1.py
Run Code Online (Sandbox Code Playgroud)

Jac*_*ijm 151

python如何找到它的模块

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

默认情况下,Python 在$PYTHONPATH.

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

import sys
print(sys.path)
Run Code Online (Sandbox Code Playgroud)

如何添加目录

偶尔

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

import sys
sys.path.insert(0, "/path/to/your/package_or_module")
Run Code Online (Sandbox Code Playgroud)

例如:

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

import sys
sys.path.insert(0, "/home/myname/pythonfiles")
Run Code Online (Sandbox Code Playgroud)

我可以简单地module_1.py通过以下方式导入文件:

import module_1
Run Code Online (Sandbox Code Playgroud)

当我创建一个并想从包中导入模块时,我需要在$PYTHONPATH.__init__.py

例如:

要从名为my_packagein的包(文件夹)导入/home/myname/pythonfiles,请将/home/myname/pythonfiles路径添加到您的$PYTHONPATH,如示例 1 中所示,然后module_2.py只需使用以下命令导入名为(包文件夹内)的模块:

from <packagename> import module_2
Run Code Online (Sandbox Code Playgroud)

将目录$PYTHONPATH永久添加到:

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

export PYTHONPATH=$PYTHONPATH:/path/you/want/to/add
Run Code Online (Sandbox Code Playgroud)

子目录

在一个包中,子目录不是这样包含的;您需要“链接”目录。要导入模块module_3.py,在文件夹subfolder内的文件夹内packagename

import packagename.subfolder.module_3
Run Code Online (Sandbox Code Playgroud)

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

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

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

例子:

如果我有一个包含script.pyand的文件夹,module.py我可以简单地通过以下方式导入模块:

import module
Run Code Online (Sandbox Code Playgroud)

  • @PaulRougieux:附加到路径的问题是您的模块可能已经存在于路径中的其他位置(例如在 .egg 文件中),并且您将选择模块的*那个*版本而不是文件中的版本。 (3认同)
  • `sys.path.append("/path/to/your/package_or_module")` 还添加了默认路径,这样就不那么混乱了。与第一个参数为“0”的“sys.path.insert(0,...)”相比。 (2认同)

Syl*_*eau 7

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

from ..Common import foo1
Run Code Online (Sandbox Code Playgroud)

而且您还需要__init__.py在所有文件夹中都有一个。