杰瑞科技汇

python脚本引入python环境

这里的核心区别在于 执行导入,这两种方式的用途和结果完全不同。

python脚本引入python环境-图1
(图片来源网络,侵删)

我会分三种最常见的情况来详细解释:

  1. 直接执行脚本
  2. 导入脚本作为模块
  3. 在Jupyter Notebook/Google Colab中引入脚本

直接执行脚本

这是最简单直接的方式,你想运行整个脚本,让它从头到尾执行一次。

如何做: 在你的终端(或命令提示符)中,使用 python 命令,后面跟上你的脚本文件名。

示例: 假设你有一个名为 my_script.py 的文件,内容如下:

python脚本引入python环境-图2
(图片来源网络,侵删)
# my_script.py
def greet(name):
    print(f"Hello, {name}!")
if __name__ == "__main__":
    print("This script is being run directly.")
    greet("Alice")
    print("Script finished.")

在终端中,你只需要运行:

python my_script.py

输出结果:

This script is being run directly.
Hello, Alice!
Script finished.

关键点:if __name__ == "__main__": 这是Python中一个非常重要的约定。

  • 当你直接执行 my_script.py 时,Python内置变量 __name__ 的值是 "__main__"
  • if 条件成立,if 代码块内的代码会被执行。
  • 如果这个脚本被导入到另一个脚本中(见情况二),__name__ 的值将是模块名(即 "my_script"),if 条件不成立,代码块内的代码就不会被执行。

导入脚本作为模块

当你想在一个脚本中使用另一个脚本中定义的函数、类或变量时,你需要导入它,这时,被导入的脚本就变成了一个模块

python脚本引入python环境-图3
(图片来源网络,侵删)

如何做: 在你要编写新代码的Python环境(交互式解释器或另一个脚本文件)中,使用 import 语句。

示例: 你有一个新的脚本 main_script.py,你想使用 my_script.py 里的 greet 函数。

# main_script.py
import my_script  # 导入 my_script.py 文件,它现在被视为一个模块
print("This is main_script.py.")
print("Now, let's use the function from my_script module.")
# 调用 my_script 模块中的 greet 函数
my_script.greet("Bob")
print("Done.")

执行 main_script.py

python main_script.py

输出结果:

This is main_script.py.
Now, let's use the function from my_script module.
Hello, Bob!
Done.

注意:

  • 因为 my_script.py 是被 import 的,if __name__ == "__main__": 里面的代码不会被执行,这就是为什么输出中没有 "This script is being run directly." 这句话。
  • 你必须确保 main_script.pymy_script.py同一个目录下,或者 my_script.py 所在的目录在Python的 sys.path 中,如果不在同一个目录,Python会找不到这个模块。

在Jupyter Notebook/Google Colab中引入脚本

在Jupyter Notebook或Google Colab这种交互式环境中,情况更加灵活,主要有三种方式。

准备工作: 假设你的工作目录中有一个 utils.py 文件,内容如下:

# utils.py
def add(a, b):
    return a + b
PI = 3.14159

方法1: 使用 %run 魔法命令

这种方式最接近“直接执行”,它会像在命令行运行脚本一样,执行 utils.py 的所有代码,并且将所有变量和函数加载到当前Notebook的命名空间中

# 在一个 Jupyter Cell 中
%run utils.py
# 执行完 %run 后,你就可以直接使用 utils.py 中的函数和变量了
result = add(10, 5)
print(f"The result is: {result}")
print(f"The value of PI is: {PI}")

输出:

The result is: 15
The value of PI is: 3.14159

方法2: 使用 import 语句

这与情况二在脚本中导入完全相同,它会创建一个名为 utils 的模块对象,你需要通过 utils.function() 来访问其内容。

# 在一个 Jupyter Cell 中
import utils
# 必须通过模块名来访问
result = utils.add(10, 5)
print(f"The result is: {result}")
print(f"The value of PI is: {utils.PI}")

方法3: 使用 importlib 库(动态导入)

这是一种更高级的动态导入方式,可以在代码运行时导入模块,当你需要根据条件或变量来决定导入哪个模块时很有用。

import importlib
# 动态导入 'utils' 模块
importlib.import_module("utils")
# 现在可以像直接导入一样使用了
result = add(10, 5)
print(f"The result is: {result}")
print(f"The value of PI is: {PI}")

注意: importlib 导入后,模块内容也会进入当前命名空间,效果类似于 %run,但过程更可控。


总结与最佳实践

方法 命令/语句 用途 结果 适用场景
直接执行 python script.py (在终端) 运行一个完整的程序或任务。 脚本从头到尾执行一次。 命令行工具、数据分析流程、自动化任务。
导入模块 import script (在代码中) 重用另一个脚本中的函数、类或变量。 被导入的脚本不自动执行可通过模块名访问。 构建大型应用、库开发、共享工具函数。
Notebook执行 %run script.py 快速加载一个外部脚本的所有内容到当前交互环境。 被执行,所有变量和函数直接可用 快速原型设计、测试、教学。
Notebook导入 import script 在Notebook中有选择地使用外部脚本的功能。 被加载,但需通过模块名访问。 保持代码整洁,避免命名冲突。

最佳实践建议:

  1. 为你的脚本写一个 if __name__ == "__main__":,这是专业Python代码的标志,把那些只想在脚本直接运行时执行的代码(如测试、主程序入口)放在这里面,这样,别人导入你的模块时就不会意外运行这些代码。
  2. 保持模块的纯粹性:一个被设计为import的模块,应该只包含定义(函数、类、变量),而不应该包含大量的打印或直接执行的业务逻辑,把业务逻辑放在 if __name__ == "__main__": 块里。
  3. 使用清晰的文件名:模块名(文件名)应该是小写、下划线命名法(如 my_utils.py),不要有空格或特殊字符。

希望这个详细的解释能帮助你完全理解如何在Python环境中引入和使用脚本!

分享:
扫描分享到社交APP
上一篇
下一篇