从另一个位置导入文件 - python
import a file from another location - python
有两个文件夹,每个文件夹包含一个 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
如果文件在同一目录中,请键入此
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
有两个文件夹,每个文件夹包含一个 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
如果文件在同一目录中,请键入此
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