繁体   English   中英

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

[英]import a file from another location - python

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

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

ImportError:没有名为b的模块

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

资料夹结构:

/ home /用户/脚本/

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

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

Import .other_file

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

假设您有这样的文件

.
├── 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM