最近在做一个项目,需要Python、golang、vue三种技术相互协调,最开始开发的时候为了节省环境搭建时间直接使用了Pycharm集成开发环境,前期是省去了很大的麻烦,当将三端代码合到一块的时候遇到了不小的问题,网上解决方法很少,现在进行一下记录,方便后续回看。
1.python的导包机制(ModuleNotFoundError: No module named)
内建模块:
Python 首先检查模块是否属于内建模块(如 sys、math 等)。
sys.path 列表:
如果不是内建模块,Python 接着查看 sys.path,这是一个目录字符串的列表,它定义了 Python 解释器搜索模块的路径。
sys.path 包含以下部分:(也就是导包的时候会搜索以下几个位置)
- 当前目录(或脚本运行的目录,即 os.getcwd() 的返回值)。
- PYTHONPATH 环境变量(如果设置了的话)中指定的目录。这是一个环境变量,可以用来添加额外的目录,让 Python 在这些目录中搜索模块。
- 标准库目录,Python 安装时自带的库和模块所在的目录。
- 任何第三方包目录,通常这些包安装在 site-packages 目录中。
导包顺序:内建模块>缓存的已编译模块(.pyc 文件)>sys.path 列表
包的初始化:
如果导入的是一个包(即包含 init.py 文件的目录),Python 将导入包的 init.py 文件并查看是否有进一步的模块导入。
导包导不进来只能在编辑器的插件中进行配置,可以如果是VScode的python插件可以按照下面步骤操作:
第一步打开python插件的配置文件
第二步在配置文件中添加以下代码(linux系统把windows替换一下):
"terminal.integrated.env.windows": {
"PYTHONPATH": "${workspaceFolder}/Classifier/",
# 解释一下workspaceFolder是你的工作路径,也就是打开项目的根
# /Classifier/是你期望python去哪里找你自己定义的包
}
2.相对路径导入机制(..\****路径下的文件不存在)
相对路径的导入一般依赖于集成开发环境,VScode一般会被设置为已打开项目的根目录。Pycharm有成熟的管理机制,一般与使用相对路径的文件有关(用户不用过度关心)。
在VScode中相对路径的出发点是打开项目的根(这个路径就是python脚本的工作目录),可以使用os.getcwd()获取到,可以os.chdir()进行修改,修改之后就可以正常的使用相对路径导入文件了
下面是整理好的代码(添加到程序入口文件):
# 设置新的工作目录
new_directory = os.getcwd()+"/Classifier"
try:
# 更改当前工作目录
os.chdir(new_directory)
print(f"当前工作目录已更改为: {os.getcwd()}")
except OSError as error:
print(f"无法更改工作目录: {error}")
项目迁移成功,服务端启动
客户端调用