我有以下结构:
/MyApp
/Module_A
__init__.py
serviceFile.py
/Module_B
clientFile.py
我正在尝试从ClientFile.py
调用ServiceFile.py中的函数From MyApp.Module_a import ServiceFile
但我收到了错误
ImportError:没有名为MyApp.Module_a的模块
为什么呢? 顺便说一句,当我从pyCharm运行它时,它只能在CDM中正常工作。 两者都使用python 2.7
答案 0 :(得分:2)
可能存在2个错误来源。第一个,就像@TomCho已经指出的那样,__init__.py
文件是否在你的模块中没有正确。但是,由于它在PyCharm中有效,我猜它是第二个。
第二种情况是您的PYTHONPATH
变量设置不正确。 python默认会查找模块的位置有很多。这包括Python安装目录和当前工作目录等位置。要查看Python看起来的完整列表,请执行..
import sys
print(sys.path)
然后,Python将下载到每个具有__init__.py
文件的目录中,这使得该文件非常重要。但是,很可能您并没有将代码放入Python看起来的默认位置。这就是PYTHONPATH
环境变量的全部目的。您将其列为包的路径列表,然后将其添加到上面显示的sys.path
。
默认情况下,PyCharm
会将您的项目目录添加到PYTHONPATH
,这就是为什么我猜它在PyCharm中工作,但不在命令行上。
要在Linux中设置PYTHONPATH
,请转到命令行并键入
export PYTHONPATH=/path/to/python/module
如果您需要添加多个路径,则可以继续附加:
,以便更一般的情况
export PYTHONPATH=$PYTHONPATH:/path/to/python/module
你可以继续这样做。我通常会将该行添加到我的~/.bashrc
文件中。
如果你在Windows中,modifying environment variables是不同的,但它仍然很容易。
答案 1 :(得分:1)
您应该在__init__.py
目录和MyApp
中放置Module_B
文件。这使得电话from MyApp.Module_B import clientFile
对我有用。这是我的树:
└── MyApp
├── __init__.py
├── Module_B
│ ├── clientFile.py
│ ├── __init__.py
默认情况下,如果某个.py
文件未与__init__.py
文件“链接”,则不会知道某个{{1}}文件是该模块的一部分。