ydf0509 / nb_log

pip install nb_log 各种日志handler和自动转化项目的任意print的效果。日志自动彩色炫酷,可点击控制台的日志自动精确跳转到pycharm的文件和行号。文件日志多进程切割安全。在10个最重要方面全方位超过loguru
378 stars 72 forks source link

项目打包安装后提示设置PYTHONPATH #6

Closed hugo2017 closed 2 years ago

hugo2017 commented 3 years ago

OSError: 如果用pycahrm启动,默认不需要你手动亲自设置PYTHONPATH,如果你是cmd或者shell中直接敲击python xx.py 来运行, 报现在这个错误,你现在肯定是没有设置PYTHONPATH环境变量,不要设置永久环境变量,设置临时会话环境变量就行, windows设置 set PYTHONPATH=你当前python项目根目录,然后敲击你的python运行命令
linux设置 export PYTHONPATH=你当前python项目根目录,然后敲击你的python运行命令
要是连PYTHONPATH这个知识点都不知道,那就要google 百度去学习PYTHONPATH作用了,非常重要非常好用, 不知道PYTHONPATH作用的人,在深层级文件夹作为运行起点导入外层目录的包的时候,如果把深层级文件作为python的执行文件起点,经常需要到处很low的手写 sys.path.insert硬编码,这种方式写代码太low了。 知道PYTHONPATH的人无论项目有多少层级的文件夹,无论是多深层级文件夹导入外层文件夹,代码里面永久都不需要出现手动硬编码操纵sys.path.append

项目中启动的sh设置PYTHONPATH正常运行,打包将main.py设置为console_scripts,其他电脑安装后会报错。按说安装到python目录,已经是在全局的PYTHONPATH中,main.main()会被创建执行脚本到/usr/bin目录下。

请帮忙解决此问题。

ydf0509 commented 3 years ago

这个已经解释了很多次了,所以直接放在代码提示了。你既然都复制出来然来的解释了。你不设置PYTHONPATH,那么我就无法知道你的项目根目录是什么文件夹路径,无法自动创建nb_log_config.py文件,因为无法决定放在哪里。任何时候设置PYTHONPATH为当前项目根目录都有好处。如果你是独立的孤立只有1个脚本,实在不需要一个项目,那也需要设置,export PYTHONPATH=./

你以为是我没考虑自动生成配置文件到python启动脚本所在的当前文件夹吗。试想一下,你项目根目录为/home/user000/data/pyproject,项目下有dira dirb dirc三个文件夹,这3个文件夹下分别有a.py b.py c.py ,项目根目录下有run.py,如果你直接进入a文件夹内部,敲击python a.py,那么我应该在a文件夹下生成nb_log_config.py吗?如果我框架这么实现在当前文件夹下生成配置文件,那你在b文件夹下运行 python b.py框架又自动在b文件夹下生成 nb_log_config.py,如果你项目深层级文件夹有有几十个脚本可以作为运行起点,你每次进去不同的深层级文件夹内部执行python xx.py,那在你项目不同的文件夹生成几十个nb_log_config.py,你不烦躁吗?

如果你不指定PYTHONPATH=你项目的根目录,你进入a文件夹下敲击python命令,我框架是如何自动知道你的项目根目录是/home/user000/data/pyproject,从而在项目里面创建nb_log_config.py,难道我的框架是神仙能自动推测你的项目根目录是你执行python脚本的多少级的父文件夹吗?

这个不是问题,是因为你不了解PYTHONPATH的用途。

hugo2017 commented 3 years ago

是打包后,另外电脑安装后执行报错,安装会将项目安装到python的目录下,不是以项目包方式运行。执行调用系统的python的包目录难道还要先设置PYTHONPATH?

hugo2017 commented 3 years ago

是不是找不到配置文件 ng_log_config.py报错?如果是这样,就是另外一个角度来考虑了,查找这个文件的逻辑是什么?

ydf0509 commented 3 years ago

查找这个文件的逻辑就是,import ng_log_config.py,你不设置PYHONPATH就无法决定在哪里创建这个文件,也就无法找到这个文件。

ydf0509 commented 3 years ago

运行前先要执行export PYTHONPATH=你的项目根目录,你肯定会有疑问,原本已近有PYTHONPATH了,为什么不把配置文件自动创建在python安装目录?我就是不希望创建在python本身的安装位置,我希望创建在用户项目根目录。

ydf0509 commented 3 years ago

解决这个问题很简单,你设置下PYTHONPATH怎么了?如果你不想这样做,觉得多敲一个命令很蛋疼,那你可以在代码里面的第一行硬编码,sys.path.insert(0,你项目的根目录“”)

hugo2017 commented 3 years ago

靠,既然要做公共需要考虑各种情况,这种想法就别来开源吧。

把整个项目都打包了,用supervisor启动作为服务运行,为什么还要搞个项目目录?直接安装就能运行不是更好?本身打包安装就可以指定main执行程序。

算了,不扯了,什么PYTHONPATH都不知道?不就是和classpath类似概念吗,java能做好的事情,为什么不去学习,故步自封。