Py学习  »  Python

命令行中的python modulenotfounderror

sotn • 5 年前 • 1384 次点击  

我已经在网上找到了这个问题的解决方案,但似乎没有一个能解决我的具体情况。

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

  1. 我必须在所有文件中添加sys.path.append调用。这是唯一可行的方法。
  2. 我不能使用任何第三方libs。
  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的人都需要更新它。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/45490
 
1384 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Steve
Reply   •   1 楼
Steve    6 年前

如果您的模块与您的可执行文件包含在同一个目录中(如您所示),则如下所示:

文件结构:

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!

你的模块目录中有初始化文件,对吧?如果没有,那可能就是你在这件事上遇到麻烦的原因。