社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

命令行中的python modulenotfounderror

sotn • 5 年前 • 1376 次点击  

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

我有一个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
 
1376 次点击  
文章 [ 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!

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