из x import y работает в Windows, но не в Ubuntu - PullRequest
1 голос
/ 08 мая 2019

Я пытаюсь импортировать класс из другого файла, но он продолжает выдавать ошибку «ModuleNotFoundError: Нет модуля с именем« x »».

Я пытаюсь сделать из себя маленького бота Telegram, который может сделать для меня множество вещей.Я использую PyCharm на Windows для кодирования.Все работает на Windows.Но после того, как я скопировал код на мой VPS, он выплевывает «ModuleNotFoundError».Я пытался использовать как относительный, так и абсолютный импорт, но ни один из них не помог.Прочитайте об относительном и абсолютном импорте из здесь .

При использовании относительного импорта я получаю другую ошибку, в которой говорится, что «__main __. FileName» не является пакетом, что, на мой взгляд, является шагом назад,

Я также думаю, что у меня та же проблема, что и у человека из этого стека обмена постом .Я сделал то, что там было сказано в ответе, и добавил пустой файл " init .py", но у меня не было изменений в выводе.Затем я увидел, что, поправьте меня, если я ошибаюсь, Python 3.3 и более поздние не нуждаются в пустом файле init .py в каждой из подкаталогов.Но у меня все еще есть они.Так, на всякий случай.

Я уже прошел через кучу вопросов о стековом потоке по одной и той же проблеме.Но, на мой взгляд, ни один из ответов не является решением моей проблемы.

Вот моя структура каталогов прямо сейчас.

baivrau-bot/
├── env.py
├── imgurDownloader
│   ├── __init__.py
│   ├── downloader.py
│   ├── main.py
│   ├── readme.md
│   └── test.py
├── readme.md
├── requirements.txt

Вот ошибка, которую я получаю.Линия 10 является виновником.

Traceback (most recent call last):
  File "main.py", line 10, in <module>
    from imgurDownloader.downloader import ImgurAlbumDownloader
ModuleNotFoundError: No module named 'imgurDownloader'

Вот строки 1-16 на main.py

import telepot
from telepot.namedtuple import InputMediaPhoto
import glob
import os
import re
import time
import sys
import shutil
from hashlib import md5
from imgurDownloader.downloader import ImgurAlbumDownloader
from env import bot_token

chat_id = sys.argv[1]
imgur_link = sys.argv[2]

bot = telepot.Bot(bot_token)

Файл 'Загрузчик' из Github repo .

Я использовал PyCharm на своем компьютере с Windows, и он работает совершенно нормально.Я за исключением того же самого при работе на Ubuntu или любом дистрибутиве Linux.

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Звучит так, будто вы не установили переменную PYTHONPATH, в которой он должен искать ваши пакеты.

Для одиночного теста попробуйте в cmd:

export PYTHONPATH="$/pwd/path_to_dir"

, прежде чем запускать свой скрипт.Но вы обязательно должны установить эту переменную навсегда.

0 голосов
/ 08 мая 2019

Возможно, вы не обращаетесь к main.py из той же папки.Проверьте ваш рабочий каталог.Какую версию PyCharm вы используете?Можете ли вы запустить его из терминала?Кроме того, вы пытались удалить префикс каталога, чтобы он был просто from downloader import ImgurAlbumDownloader?

Мой последний совет - следовать обычной структуре проекта, в которой ваши тесты находятся в другой папке: Какой проект является лучшимструктура для приложения Python?

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