Python导入私有模块(企业级方案)

背景

python 复制代码
PythonProject/
    │
    └── src/
        ├── configuration/
        │   ├── __init__.py
        │   └── config.py           
        │
        └── process/
            ├── __init__.py
            └── test.py  <-- 你运行的文件

找不到configration模块

用from src.configuration.config import *但是离开集成开发环境就失效

复制代码

pycharm运行带有导入模块的py文件

第一步

PythonProject/src/configuration/config.py

python 复制代码
setting = 'I am config'

PythonProject/src/process/test.py

python 复制代码
from configuration.config import *

def preprocess():
    print('预处理')
   

if __name__ == '__main__':
    preprocess()

第二步

在pycharm中设置指定目录为source文件目录

  1. 在左侧 Project 面板,指定目录。

  2. 右键 → Mark Directory asMark as Sources Root

  3. 图标变蓝色,完成。

第三步

在pycharm里运行test.py

windows、linux运行带有导入模块的py文件

python 复制代码
PythonProject/
    │
    └── src/
        ├── configuration/
        │   ├── __init__.py
        │   └── config.py           
        │
        └── process/
        |   ├── __init__.py
        |   └── test.py  
        |
        └── main.py         <-- 你运行的文件

第一步

PythonProject/src/configuration/config.py

python 复制代码
setting = 'I am config'

PythonProject/src/process/test.py

python 复制代码
from configuration.config import *

def preprocess():
    print('预处理')
   

if __name__ == '__main__':
    preprocess()

PythonProject/src/main.py

python 复制代码
from sys import argv


if __name__ == '__main__':
    print(argv)
    # 获取列表中第二个参数
    arg = argv[1]
    match arg:
        case 'test':
            from process.test import test
            test()

第二步

终端运行

bash 复制代码
python D:\PythonProject\src\main.py test

Linux同理

python 目录/PythonProject/src/main.py test

原理

一、问题:Python 是怎么找到模块的?

Python 找模块(包、.py 文件),全靠一个叫 sys.path 的列表,里面存着所有它会去 "搜索" 的目录。

你在终端运行命令:

复制代码
python D:\PythonProject\src\main.py test

Python 会自动把 被运行的脚本所在的目录 ,也就是 D:\PythonProject\src,加到 sys.path 的第一个位置。这就是为什么你在 test.py 里打印 sys.path,能看到 D:\PythonProject\src 在列表最前面。


二、sys.path 决定了 Python 去哪里找包

sys.path 的构成:

  1. 被运行脚本的目录D:\PythonProject\src(你运行 main.py 时自动加上的)
  2. Python 的标准库目录
  3. site-packages 目录(装第三方库的地方)

当你写 from process.test import test 时,Python 会做这几步:

  1. 遍历 sys.path 里的每一个目录
  2. 去目录里找叫 process 的东西
    • 它在 D:\PythonProject\src 里找到了 process/ 文件夹
    • 这个文件夹里有 __init__.py,Python 就把它识别成一个
  3. 再在 process 包里找 test.py 文件,成功找到并导入
  4. 同理,from configuration.config import * 也是这样:src/configuration/ 被识别为包,然后找到里面的 config.py
相关推荐
XS0301062 小时前
Java 基础(十)异常
java·开发语言·oracle
!停2 小时前
C++入门STL容器Vector使用基础,深挖 Vector替代 C 语言繁琐容器的利器
开发语言·c++
2401_871492852 小时前
Vue.js计算属性computed依赖追踪与副作用函数effect关联机制
jvm·数据库·python
qq_283720052 小时前
本地大模型部署全教程:Python 低成本调用开源 AI 模型
人工智能·python·开源
2401_882273722 小时前
SQL如何快速提取分组中最晚时间点数据_结合窗口函数实现
jvm·数据库·python
小何code2 小时前
【Python零基础入门】第4篇:Python变量与数据类型详解
开发语言·python
xiaoshuaishuai82 小时前
C# 数字资源分发
开发语言·c#
techdashen2 小时前
用自家产品构建自家产品:Cloudflare Images 的工程架构解析
开发语言·架构·rust
卷心菜狗2 小时前
Python进阶--生成器(Generator)
python