在之后的项目中,已将两套程序进行深度合并,只是在入口程序 main.py 上做了修改并形成独立入口程序文件,而原来的老程序代码也没办法一下子就将代码合并,于是试了试预想中的办法并且成功实现。
在主程序中建立一个类似 task 的目录文件夹,将后台代码程序全部放在此文件夹中。在运行时会出现一个问题,后台任务的运行如下:
docker exec 容器ID python /app/task/main.py 任务ID
但是在后台任务运行时会出现 main.py 中的import模块会首先去加载 /app/目录下的模块,而不是 /app/task/ 下的模块。
开始我尝试着使用 os.chdir()来改变当前的工作目录。chdir()函数是OS模块的函数,用于改变当前工作目录。
import os
# 改变到指定的目录
os.chdir('/path/to/directory')
# 获取当前工作目录
current_dir = os.getcwd()
print(current_dir)
# 加载模块
from conf.config import Config
但在执行 import 的时候发现仍然是去加载 /app/conf/config 模块,这就没有达到我的目的了。通
什么是sys.path
在Python中,sys.path是一个包含了Python解释器在导入模块时搜索路径的列表。当我们在程序中导入模块时,Python会按照sys.path列表中的顺序来搜索需要导入的模块。sys.path列表的第一个元素是空字符串,表示当前目录。其余的元素是Python解释器搜索模块的路径。
过打印原始的sys.path列表,发现其存在 /app/ 路径也存在 /app/task路径,很有可能是优先加载了 /app/路径,打印出来的时候是 /app/task路径 在前,这样来看有可能/app/路径在搜索的时候会优先加载。我曾想过将两个目录的顺序调换,但没有去尝试。因为我想应该可以通过修改 sys.path 来达到效果。
在运行一些特殊需要的作业比如我这样的后台任务时,可以使用 sys 模块去掉一些路径,通过操作sys.path列表来实现。示例如下:
import sys
# 打印原始sys.path列表
print(sys.path)
# 去掉路径
delete_path = "/path/to/directory"
# 判断路径是否在sys.path中
if delete_path in sys.path:
# 从sys.path中移除路径
sys.path.remove(delete_path)
# 打印sys.path列表
print(sys.path)
sys.path是在Python解释器启动时根据配置文件和环境变量生成的,它包含了默认的模块搜索路径。在运行时修改sys.path列表,其修改范围仅限于当前Python解释器的运行时环境,并不是永久修改,而这正是我要的修改范围,因为其它的程序还在运行着API服务,不能变更其sys.path
本文地址:http://47.93.183.36/article/1280.html 未经许可,不得转载. 手机访问本页请扫描右下方二维码.
手机扫码直接打开本页面 |