从另一个位置导入文件 - python

Posted

技术标签:

【中文标题】从另一个位置导入文件 - python【英文标题】:import a file from another location - python 【发布时间】:2018-11-06 15:27:37 【问题描述】:

有两个文件夹,每个文件夹都包含一个 python 文件。 例如:first_folder 包含 a.py & second_folder 包含 b.py

我尝试在 a.py 中导入 b.py 但我没有导入错误。

ImportError: 没有名为 b 的模块

请帮我解决这个问题。我也尝试在两个文件夹中创建一个空白的 init.py,但没有成功。

文件夹结构:

/home/user/scripts/

 |
 |--------python_scripts
 |          |
 |          |
 |          |------- a.py
 |
 |--------lib
           |
           |-------b.py

【问题讨论】:

你能提供一个你的文件夹结构的例子吗? 可能这两个文件不在PATH中或者你的工作目录不在正确的位置。 你的文件夹结构是什么,你在哪些文件夹中有什么文件? 第一个文件夹:'python_script',包含 a.py 第二个文件夹:'lib',包含 b.py 两个文件夹都在同一个位置。我在该位置后面的一个文件夹中运行脚本 例如:'scripts'文件夹包含'python_script'和'lib'文件夹。我正在“脚本”位置执行 【参考方案1】:

假设你有这样的文件

.
├── first_folder
│   └── a.py
└── second_folder
    └── b.py

您可以使用abs路径将a.py作为模块导入b.py

import importlib.util

spec = importlib.util.spec_from_file_location('a', 'path/to/first_folder/a.py')

foo = importlib.util.module_from_spec(spec)

spec.loader.exec_module(foo)

print(dir(foo))

还有另一种方便的方式来加载b.py

$ cd path/to/second_folder

$ ln -s path/to/first_folder ./first_folder

并将a.py 导入为普通的python 模块

import a from first_folder

【讨论】:

【参考方案2】:

Python 的import 将在python 路径中查找模块(.py 文件)。您可以在 sys.path 变量中查看 python 路径中的内容。

默认情况下,sys.path 将包含您运行的脚本所在的目录。它还将包括在PYTHONPATH 环境变量中定义的所有内容。

因此,如果您有两个包含 .py 文件的目录,您可以将两者都放在 python 路径中,或者您可以确保所有源代码都在同一个路径条目下。

选项 1

(这个语法取决于你的shell,这里是windows)

set PYTHONPATH=%PYTHONPATH%;\path\to\second_folder

python \path\to\first_folder\a.py

然后,您可以简单地import b

选项 2

在两个目录中创建一个空的__init__.py,并在它们上面的目录中创建一个run.py,这样你就有了:

root_dir
    run.py
    first_folder
        __init__.py
        a.py
    sedond_folder
        __init__.py
        b.py

run.py 设为您的入口点(运行python run.py),然后您可以使用它们的完整模块名称从任何其他模块导入任何模块:

import first_folder.a
import second_folder.b

【讨论】:

谢谢。通过将文件夹附加到“sys.path”,它起作用了【参考方案3】:

如果文件在同一目录中,请键入此

Import .other_file

【讨论】:

文件在不同的目录 这真的取决于你必须做什么。你能提供确切的文件结构吗?它也可能有助于使用 pycharm。它将帮助您编写更好的代码

以上是关于从另一个位置导入文件 - python的主要内容,如果未能解决你的问题,请参考以下文章

如何将 python 函数从另一个文件导入 django 视图

Python 3模块从另一个文件夹导入错误[重复]

从另一个目录导入python模块

我想从另一个 python 文件中导入一个变量(Django)

从另一个文件中的类导入函数?

从另一个目录导入的Python失败