[英]Python strange import behavior: import x.y works, from x import y doesn't
[英]from x import y works on Windows but not on Ubuntu
我正在尝试从不同的文件导入一个类,但它一直给我一个“ModuleNotFoundError: No module named 'x'”错误。
我正在努力让自己成为一个可以为我做各种事情的小电报机器人。 我在 Windows 上使用 PyCharm 进行编码。 一切都在 Windows 上运行。 但是在我将代码复制到我的 VPS 后,它会吐出“ModuleNotFoundError”。 我曾尝试使用相对导入和绝对导入,但它们似乎都不起作用。 从这里阅读相对和绝对导入。
当使用相对导入时,我得到一个不同的错误,说“__main __.fileName”不是一个包,我觉得这是一个倒退。
我也认为我和这个stackexchange post上的人有同样的问题。 我按照那里的答案做了,并添加了一个空的“ init .py”文件,但我的输出没有任何变化。 然后我看到了,如果我错了,请纠正我,Python 3.3 及之后的每个子目录中都不需要空的init .py 文件。 但我仍然拥有它们。 以防万一。
我已经就类似的问题解决了一堆stackoverflow问题。 但在我看来,没有一个答案能真正解决我的问题。
这是我现在的目录结构。
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)
文件“下载器”来自Github 存储库。
我在我的 Windows 计算机上使用了 PyCharm,它运行良好。 在 Ubuntu 或任何 linux 发行版上运行时,我除外。
听起来你没有设置你的PYTHONPATH
变量,他应该在那里搜索你的包。
对于单个测试,请在命令行中尝试:
export PYTHONPATH="$/pwd/path_to_dir"
在你开始你的脚本之前。 但是你绝对应该永久设置这个变量。
您可能不是从同一文件夹访问main.py
检查您的工作目录。 您使用的是哪个版本的 PyCharm? 你可以从终端运行它吗? 另外,您是否尝试删除目录前缀,以便它只是from downloader import ImgurAlbumDownloader
?
我的最后一个建议是遵循传统的项目结构,其中您的测试位于不同的文件夹中: Python 应用程序的最佳项目结构是什么?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.