试图解决这个问题,因为从Pycharm和终端运行代码时之间存在不一致。
Pycharm自动添加当前工作目录;所以,如果我添加一个包含在我的CWD中的模块,那不是在Pythonpath中,它可以正常工作。
但是当从终端运行时,Python确实会抱怨,因为我的import语句引用了无法访问的模块,因为CWD没有添加到PYTHONPATH(我确实在从Pycharm运行时打印出变量的内容并从终端)。
所以在这一点上我假设在我的启动代码中,我需要在Pythonpath中添加当前目录,否则这是不正确的?我无法分辨最终用户可能将我的代码放在哪里;我只是假设包含所有不同模块的整个目录位于特定位置。
更具体地说,这就是我所在的地方:
当我从Pycharm运行时,我的CWD是/apps/myapp/logic/
,我在该目录中cd
之后运行脚本,然后用./myscript.py
该脚本将#!/usr/bin/python3
行作为第一行,而不是使用python3 -m myscript.py
运行
/apps/myapp/logic/
)的同一目录中或上一层(/apps/myapp/
);遗憾的是,模块加载发生在__main__
运行之前;所以我无法将sys.path
添加到运行脚本的当前目录中。 答案 0 :(得分:0)
经过各种反复试验,感谢我从评论中得到的信息;我找到了两种解决问题的方法。
1)创建一个shell脚本或另一个python脚本,它添加当前目录(所有文件都存在),并且在此文件中没有导入。然后脚本调用具有main函数的脚本。
2)在模块的顶部,在导入sys
之后,添加语句以添加路径,这样当前目录将被添加到PATH并且当导入时它将是可访问的尝试访问该模块。
两者看起来都不太好,但这就是我能找到的,以解决问题。非常确定有一种更优雅的方式可以做到这一点