我在已继承的项目上有以下目录结构:
work_dir/
FlaskControlPanel/
static/
templates/
app.py
models/
__init__.py
model1.py
model2.py
script1.py
script2.py
从script1.py
或script2.py
我可以运行此from models.model1 import Class1, Class2
并且它可以正常运行。使用PyCharm时,我可以在app.py
中使用相同的导入行。
但是,当我在我的开发服务器上部署它时,这不适用于app.py
。我收到错误ImportError: No module named models.model1
PyCharm做些什么来解决这个问题?
如何在app.py
中修复我的导入以在PyCharm和我在开发服务器上运行Flask应用程序时工作?我通常只使用python app.py
目录中的FlaskControlPanel
在服务器上运行它。
答案 0 :(得分:2)
您必须确保将work_dir
添加到sys.path或PYTHONPATH中。
Python会自动将脚本文件的父文件夹添加到sys.path中。因此,如果您在shell中运行app.py,则只会将FlaskControlPanel
插入到sys.path中,而python可以找到models
所在的位置。
但是在pycharm中,它总是在sys.path中添加work_dir
。这就是为什么你可以毫无问题地运行app.py
。
对于您的问题,您可以将目录更改为work_dir
并运行PYTHONPATH=. python FlaskControlPanel/app.py
https://docs.python.org/2/using/cmdline.html#interface-options
执行脚本中包含的Python代码,该代码必须是文件系统路径(绝对路径或相对路径),指向Python文件,包含__main__.py文件的目录或包含__main__.py文件的zipfile。
如果给出此选项,则sys.argv的第一个元素将是命令行中给出的脚本名称。
如果脚本名称直接引用Python文件,则包含该文件的目录将添加到sys.path的开头,并且该文件将作为__main__模块执行。
如果脚本名称引用目录或zipfile,则脚本名称将添加到sys.path的开头,并且该位置的__main__.py文件将作为__main__模块执行。