从另一个位置导入文件 - 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 视图