我试图从一个不同的文件导入一个类,但它一直给我一个"ModuleNotFoundError: No module named 'x'“错误。
我正在试着让自己成为一个小小的Telegram机器人,它可以为我做各种事情。我正在使用Windows上的PyCharm进行编码。一切都可以在Windows上运行。但在我将代码复制到我的VPS后,它显示出"ModuleNotFoundError“。我尝试过使用相对导入和绝对导入,但它们似乎都不起作用。阅读有关从here进行相对和绝对导入的信息。
当使用相对导入时,我得到一个不同的错误,说“__main __.fileName”不是一个包,我觉得这是一种倒退。
我也认为我和这个stackexchange post上的人有同样的问题。我按照答案所说的做了,并添加了一个空的"init.py“文件,但我没有对输出进行任何更改。然后我发现,如果我错了,请纠正我,Python3.3和之后的版本不需要在每个子目录中都有一个空的初始化.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'
下面是main.py上的第1-16行
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)
文件“downloader”来自Github repo。
我在我的视窗电脑上使用了PyCharm,它工作得很好。我希望在Ubuntu或任何linux发行版上运行时都是一样的。
发布于 2019-05-09 03:29:28
听起来您没有将PYTHONPATH
变量设置在他应该搜索您的包的位置。
对于命令行中的单个测试,请尝试:
export PYTHONPATH="$/pwd/path_to_dir"
在开始你的脚本之前。但是你绝对应该永久地设置这个变量。
发布于 2019-05-09 03:01:04
您可能不是从同一文件夹访问main.py
。检查您的工作目录。您使用的是什么版本的PyCharm?你能从终端运行它吗?另外,您是否尝试删除目录前缀,使其仅为from downloader import ImgurAlbumDownloader
我的最后一个技巧是遵循传统的项目结构,其中测试位于不同的文件夹中:What is the best project structure for a Python application?
https://stackoverflow.com/questions/56047036
复制相似问题