python中这个包结构有什么问题?

时间:2017-07-07 02:08:38

标签: python pycharm

我有以下结构:

/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

2 个答案:

答案 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}}文件是该模块的一部分。