我正在尝试建立一个网络清理器来备份我的社交媒体账户(暑期项目,我知道这是没用的)。在
我正在尝试创建一个不错的类结构,因此我提出了以下结构(我接受批评,我对编程相当陌生):
\social-media-backup
\Files
__init__.py
File.py
Image.py
Video.py
\SocialMedia
SocialMediaFeed.py
SocialMediaPost.py
\Instagram
__init__.py
\MediaTypes
__init__.py
GraphImage.py
GraphVideo.py
\SearchTypes
__init__.py
InstagramUser.py
\Twitter
\VSCO
(Twitter和VSCO目前是空的。任何没有扩展名且以\开头的内容都是一个文件夹。每个文件都有一个与内部文件同名的类)
__init__.py
中写入什么以便import SOME_PACKAGE
并让它导入每个模块?(例如:导入文件并文件.图像以及文件。视频无障碍)。在)我知道有很多问题。它们是按重要性排序的)
from Files.File import File
from ...Files.File import File
import File
from File import File
几乎任何你能想象到的组合。在
我总是得到一个Unable to import
、No module named '__main__.Files'
或{
我已经习惯了Java的这种方式,我不知道如何在Python中实现这一点。看起来一团糟。我真的很怀念添加一个package
和一个运行编译器的文件夹树。在
有很多关于这个的东西。。。然而,大多数指南关注的是你怎么做,而不是做什么。在
我是如何做到的(对于中小型项目):
sys.path
。在python -m foo.bar
使用你的结构的具体例子。假设您的入口点可能在
\SocialMedia\SocialMediaFeed.py
中,请使用import语句:from . import SocialMediaPost
(姐妹模块)import Instagram
(子模块)from Files import Image
(其他模块)并使用:
python -m SocialMedia.SocialMediaFeed
运行通过作为模块运行,您总是将项目根(
social-media-backup
)添加为“搜索路径”。这样,引用其子文件夹的绝对导入始终有效。顺便说一下,您可以使用import sys; print(sys.path)
打印出模块搜索路径。在其中有些可能看起来过于复杂,但我发现,只要您尝试打包安装所需的东西(关键字
setup.py
),遵循以上几点就可以获得很大的回报。在编辑:回答第三个问题:让
__init__.py
包含:我将支持Damian和user2357112的评论——在创建模块时,尽量避免文件夹、文件和类/函数之间的名称冲突。在
如果不将当前工作目录添加到PYTHONPATH中,您可能无法导入当前工作目录之外的任何内容。将文件夹添加到PYTHONPATH环境变量中意味着python在导入模块时将始终检查该文件夹,因此您可以从任何地方导入它。在
已经有一个很好的线索可以让你走上正确的方向: Permanently add a directory to PYTHONPATH? (一篇博文中涉及的内容很多)
相关问题 更多 >
编程相关推荐