记录一个坑;pycharm中运行,会添加项目目录到系统路径,所以不管在哪一级目录调用项目目录都是可以的,但是;在Linux服务器上,程序的运行目录就是当前脚本目录,这个时候就无法像pycharm中一样调用到上级目录;
1)首先在调用python包的时候,例如pycharm上,如果你要调用上级目录中的包,例如:

在 naroto里面调用 config.py中的Config类, 你可以这么写
from config.config import Config
这样在IDE里直接运行是没有问题的,这是因为IDE默认添加了项目的各级路径到sys.path当中,
root_dir
|--config
|--zoro
也就是说python解释器会查找路径root_dir下的python包,所以这样调用时没有问题的。
但是,在服务器上运行的时候,它不会自动添加路径到sys.path中,所以你调用会出问题。你可以print(sys.path)除了安装包添加的路径,
它只在脚本同级目录下找包。所以导不进来!
解决方法是在程序当中手动添加路径,你可以使用__file__变量
root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 包的根目录
sys.path.append(root)
这种方法在程序运行的时候临时添加,对系统环境没有影响,写在导包之前就可以顺利导入了!
注意,这里还有一个坑!__file__变量在ide返回的其实是绝对路径,但是在服务器上返回的是当前运行层(程序运行的起点)到脚本的路径,比如,你在root_dir目录下运行python zoro/naroto.py 其中脚本中__file__ 就是zoro/naroto.py,进入到zoro目录下运行 python naroto.py 就是__file__ == naroto.py。 所以还得使用os.path.abspath(__file__)返回绝对路径,再得到上级目录,然后添加。 这样就没问题了!!
在哪一层运行脚本都没问题!
本文记录了在Pycharm中和Linux服务器上运行Python脚本时遇到的路径问题。Pycharm会自动将项目路径添加到系统路径,而Linux则不会。当尝试从脚本调用上级目录的包时,需要手动添加路径。解决方案是利用__file__变量获取脚本的绝对路径,并添加到sys.path中。需要注意的是,__file__在不同运行环境下返回的路径形式不同,需要通过os.path.abspath()获取绝对路径来确保正确引用。
2262

被折叠的 条评论
为什么被折叠?



