Python modulenotfounderror из командной строки - PullRequest
0 голосов
/ 12 февраля 2019

Я искал решения для этой проблемы в Интернете, но ни один из них, похоже, не подходит для моей конкретной ситуации.

У меня есть проект pycharm с несколькими каталогами, подкаталогами и файлами.Когда я вызываю метод основной точки входа из командной строки, я получаю ModuleNotFoundError для всех импортов в ~ 20 файлах.Решения, которые я нашел в Интернете, рекомендуют модифицировать PYTHONPATH.Это нереальное решение для моего варианта использования, потому что

  1. Мне нужно добавить вызов sys.path.append во все мои файлы.Это единственный способ, которым это работает.
  2. Я не могу использовать сторонние библиотеки.
  3. Я буду делиться проектом в виде zip-файла.Примечание: я не могу использовать github для совместного использования проекта, и я не собираюсь создавать распространяемый.Поэтому, когда кто-то разархивирует проект на своем ПК, он сможет запустить его из командной строки без каких-либо проблем.Им не нужно изменять свои переменные 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.

Когда я добавляю sys.path.append, он работает, но я должен сделать это для каждого оператора импорта и его жестко закодированного пути abs, который должен быть обновлен любым пользователем с zip.

1 Ответ

0 голосов
/ 12 февраля 2019

Если ваши модули находятся в том же каталоге, что и исполняемый файл, как вы, вероятно, указываете, это просто:

Структура файла:

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 в каталогах модулей, верно?Если нет, то, вероятно, именно поэтому у вас возникли проблемы с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...