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 as → Mark 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
相关推荐
benchmark_cc3 分钟前
QuantDash 安装成功后,如何验证 Python 环境可以正常导入 SDK?
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
学逆向的16 分钟前
C 内存属性
c语言·开发语言·算法·网络安全
zh路西法1 小时前
【模型式强化学习】(二)PETS——从概率动力学模型到模型预测控制(MPC)
pytorch·python·强化学习·pe·mpc·ces·pets
HAPPY酷2 小时前
C++ 自定义内存池优化点云处理:从裸指针到 RAII 自动回收
开发语言·c++
梦帮科技2 小时前
量子纠缠网络与量子隐形传态攻防:量子中继器信道串扰、纠缠态保真度降解与量子路由劫持
开发语言·网络·人工智能·算法·自动化·php
Python自动化直播2 小时前
智能脚本批量管理拆开看:导入、导出、重写、试听
前端·python·ai·秒播
老王IT2 小时前
C语言语法基础语法介绍
c语言·开发语言·算法
code2cat3 小时前
Java高级篇之JDBC:连接数据库,完成查询、更新与事务
java·开发语言·数据库
hzxxxz3 小时前
PHP引擎两个高危漏洞复盘:计数顺序与旧地址缺陷的机理与处置清单
开发语言·php