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
相关推荐
我的xiaodoujiao6 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest
人邮异步社区6 小时前
怎么把C语言学到精通?
c语言·开发语言
qetfw6 小时前
MXU:Tauri 2 + React 的 MaaFramework 跨平台 GUI 源码
前端·python·react.js·前端框架·开源项目·效率工具
心平气和量大福大6 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai7 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
用户8356290780517 小时前
Python 实现 Excel 页面布局与打印设置自动化
后端·python
এ慕ོ冬℘゜7 小时前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript
执明wa7 小时前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio
一次旅行7 小时前
Python+大模型端到端自动化日报系统
开发语言·python·自动化
_Jimmy_7 小时前
AI应用开发工程师面试题库
人工智能·python·深度学习·机器学习·知识图谱