PyDev Eclipse 中的“源文件夹”和“pydev 包”有啥区别?

Posted

技术标签:

【中文标题】PyDev Eclipse 中的“源文件夹”和“pydev 包”有啥区别?【英文标题】:What is the difference between a "source folder" and a "pydev package" in PyDev Eclipse?PyDev Eclipse 中的“源文件夹”和“pydev 包”有什么区别? 【发布时间】:2013-09-03 23:29:42 【问题描述】:

PyDev Eclipse 中的“源文件夹”和“pydev 包”有什么区别?

【问题讨论】:

【参考方案1】:

是具有逻辑分组的文件的收集器

import <package>.<file>

源文件夹使文件可直接导入

import <file>

常规文件夹基本上是无法访问的。

我做了一个快速的项目来显示差异。我在每种类型的容器中放置一个文件:常规文件夹源文件夹。每个文件有两个项目: 一个名为 show() 的函数 和一个具有单个公共成员 show() 的类

然后我将驱动程序文件放在顶层(在项目根目录中,在 3 个容器旁边)。这只是为了尝试不同的导入方式。下面是带有 cmets 的驱动程序文件的副本,用于描述如何使用不同的元素:

### valid imports
import package
import package.file_in_package as thefileinpackage
import file_in_source

### invalid imports
#import package.file_in_package.packageclass   #runtime ImportError
#import file_in_package                        #unresolved import

#import source                                 #unresolved import
#import source.file_in_source                  #unresolved import
#import file_in_source.sourceclass             #runtime ImportError

#import folder                                 #unresolved import
#import file_in_folder                         #unresolved import
#import folder.file_in_folder                  #unresolved import

thefileinpackage.show()
packageclasss_inst = thefileinpackage.packageclass()
packageclasss_inst.show()

file_in_source.show()
sourceclass_inst = file_in_source.sourceclass()
sourceclass_inst.show()

package.file_in_package.show()
packageclass_inst2 = package.file_in_package.packageclass()
packageclass_inst2.show()

【讨论】:

所以源文件夹直接在“类路径下”制作模块,用Java的方式表示,而python中的包就像Java中的包。【参考方案2】:

源文件夹是添加到 PYTHONPATH 的文件夹。

包是一个包含__init__.py 文件的文件夹(位于源文件夹下)。

【讨论】:

【参考方案3】:

“源文件夹”是包含源文件的目录。将 .py 文件放入此目录将使 PyDev 可以发现它们,以便您可以从其他 Python 文件中导入它们。

“PyDev 包”是 Python 包。这意味着它包含一个名为__init__.py 的文件。例如,如果您创建一个名为 foo 的新 PyDev 包,那么您将获得文件 foo/__init__.py。您可以将其他 .py 文件放入foo/,然后您可以将其导入。所以,如果你将bar.py 放入foo/,那么你可以这样做

import foo.bar

这对于源文件夹是不可能的。

您通常将包放入源文件夹。我不知道是否可以将源文件夹放入包中,但即使是您也几乎不会这样做。

【讨论】:

源文件夹是否必须包含__init__.py 以便解释器可以在此文件夹中找到模块? 不——这就是包的用途。 :) 那么“源文件夹”更好,它做同样的事情并且不需要__init__.py 文件。对吗? 取决于你想要什么——在上面的例子中,你可以import foo.bar,因为foo是一个包。如果 foo 仅仅是一个源文件夹,这是不可能的。源文件夹包含包,我认为一个包不可能包含源文件夹。 用我之前评论中的信息更新了我的答案。

以上是关于PyDev Eclipse 中的“源文件夹”和“pydev 包”有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

M2E 并将 maven 生成的源文件夹作为 eclipse 源文件夹

如何将 gradle 生成的源文件夹添加到 Eclipse 项目?

Eclipse Android gen 已存在但不是源文件夹

Eclipse Android gen 已存在但不是源文件夹

源文件夹和(普通)文件夹之间有什么区别

eclipse中怎么查看classpath路径