我通过以下方式定义了项目:
project/
__init__.py
dog.py
cat.py
在我的dog.py中,我打电话:
import project.cat
这给了我这个错误:
ModuleNotFoundError: No module named 'project'
但是,我已经将PYTHONPATH设置为项目目录的父目录,如果我在Pycharm外部(例如,在命令行上)运行dog.py,那么它将毫无例外地很好地工作。
现在,即使我将项目文件夹添加为Source Root,Pycharm仍将导入语句标记为错误(红色),并且也不允许我在Pycharm中为dog.py程序运行它。这真令人困惑。有人可以帮忙吗?
* PS:我不想在dog.py中使用相对的导入,例如“ from .cat import *”,因为我有if name == main 语句在dog.py中,该python不允许我在dog.py中运行相对导入。
===============
添加更多信息:
我注意到是否在项目下创建了src文件夹以使结构类似:
project/
__init__.py
src/
__init__.py
dog.py
cat.py
然后我可以在dog.py中称呼它
import src.cat
但是这样,我仍然很麻烦,因为当我在Pycharm中运行程序时,我必须使用这种方式:
import src.cat
当我在ipython Notebook中运行程序时,我必须像这样导入:
import project.src.cat
这使我不得不在不同地方运行时不断切换代码。
====================
如果我只是在dog.py中这样做
import cat
它将在Pycharm中运行。但是当我在命令行中调用时,现在那里出错了:
In [10]: import project.dog
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
<ipython-input-10-be5ebc05b4b0> in <module>
----> 1 import project.dog
~/PycharmProjects/project/dog.py in <module>
2 import pandas as pd
3 import numpy as np
----> 4 import cat
5 from datetime import datetime
6
ModuleNotFoundError: No module named 'cat'
答案 0 :(得分:0)
通过将项目的父文件夹设置为根文件夹并以root设置为Source Root来解决此问题。
parent-folder\
project\
__init__.py
dog.py
cat.py
现在,只需在.bashrc中添加一行,它就可以在命令行和Pycharm上很好地工作:
export PYTHONPATH=$PYTHONPATH:~/project