【问题标题】:Difference between 'Directory' and 'Python Package' in PyCharmPyCharm 中“目录”和“Python 包”的区别
【发布时间】:2019-12-10 13:24:50
【问题描述】:

  1. 何时使用 Directory over Python 包? PS:我知道我可以从后者导入,但不能从前者导入。如果是这样,为什么不将所有内容都创建为 Python 包?
  2. 另外,PyCharm 是否根据其名称将位置标记为一个或另一个?这种行为背后的模式是什么? 例如,我创建了一个目录并将其命名为“lambda”。但是当我将它重命名为“lambdas”时,pycharm 自动将其更改为 Python 包(带有点符号的公文包)。 Python 关键字?

【问题讨论】:

    标签: pycharm python-packaging


    【解决方案1】:

    何时使用 Directory over Python Package?

    当您想在其中放置一些应该可以导入的模块时,您可以使用“Python 包”。 PyCharm 会自动为该目录创建一个__init__.py

    为什么不将所有东西都创建为 Python 包?

    并非项目中的每个子目录都必须是一个包。例如docstests 通常只是目录。

    PyCharm 是否根据名称将位置标记为一个或另一个?

    如果子目录名称为is a valid identifier and not a keyword,PyCharm 似乎会用点标记图标,无论子目录是否为包。这可能是因为在 Python 3.3+ 中,子目录也是 implicit namespace packages(即使没有 __init__.py 文件,它们仍然可以导入)。

    如果您有一个与 Python 2.7 解释器关联的项目,除非添加了 __init__.py 文件,否则您不会在图标上看到点,因为隐式命名空间包在 Python 2 中不是一个东西。

    【讨论】:

    • 谢谢。澄清一下,在 Python 3.3+ 中,PyCharm 无论如何都会用一个点标记一个子目录(只要它是一个“标识符”)。这是否意味着在这种情况下每个子目录都是可导入的?如果是这样,我如何像你提到的那样为测试和文档取消标记?
    • 是的,这意味着每个子目录都是可导入的。我不知道如何在 PyCharm 中取消标记,可能你不能。
    • from services.StockAnalyzer import StockReport 服务是否有 init.py 我可以通过这种方式导入,你能解释一下如果我有 init 会有什么样的限制吗文件与否我不明白区别
    猜你喜欢
    • 2012-09-21
    • 2011-10-16
    • 1970-01-01
    • 2011-09-21
    • 2013-01-30
    • 2018-10-13
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多