命令行中的Python ModuleNotFoundError

时间:2019-02-11 22:59:47

标签: python import module

我已经在网上查找有关此问题的解决方案,但是似乎都没有解决我的具体情况。

我有一个pycharm项目,其中包含多个目录,子目录和文件。当我从命令行调用主入口点方法时,我得到 跨约20个文件的所有导入上的ModuleNotFoundError。我在网上找到的解决方案建议修改PYTHONPATH。对于我的用例来说,这不是可行的解决方案,因为

  1. 我必须在所有文件中添加sys.path.append调用。那是它似乎起作用的唯一方法。
  2. 我不能使用任何第三方库。
  3. 我将以zip文件形式共享项目。注意:我不能使用github共享项目,也不能创建可分发的对象。因此,当其他人在其PC上解压缩该项目时,他们应该能够从命令行运行该项目而不会出现任何问题。他们不必修改其env变量即可运行它。

我有什么选择?

编辑:

项目结构:

Project-
        |
        | 
     mod-
         |
         |
       data-
           |
           |
        ClassA.py
        ClassB.py
           |
     config-
           |
           |
       ClassC.py
       ClassD.py
         ...
   main.py

导入语句如下:

from mod.data.ClassA import ClassA

错误:

ModuleNotFoundError: No module named 'ClassA'

我的python文件中的每个import语句都会显示此错误。

当我添加sys.path.append时,它可以工作,但是我必须为每个import语句执行此操作,并且它是一个硬编码的abs路径,任何有zip的人都需要更新。

1 个答案:

答案 0 :(得分:0)

如您所显示的,如果您的模块与可执行文件包含在同一目录中,则很简单:

文件结构:

f1.py
m1
  __init__.py
  C1.py

C1.py

class C1:
    def test(self):
        print("Hi!")

f1.py

#!/usr/bin/env python

from m1.C1 import C1

C1().test()

执行:

> python f1.py
Hi!

您的模块目录中确实有__init__.py文件,对吗?如果没有,那可能就是您遇到麻烦的原因。