【问题标题】:How to have Python package not require import package.package如何让 Python 包不需要 import package.package
【发布时间】:2019-08-28 16:50:32
【问题描述】:

tl;dr - 我的 python 包需要 import package.package 而不是只使用 import package。如何让它与后者一起使用?


我正在尝试设置我的第一个 python 包,但在过程的导入部分遇到了一些问题。

我的python包文件设置在我的电脑上是这样的:

my-package
 - build
 - dist
 - package
 - package.egg-info
 - LICENSE
 - README.md
 - Setup.py

package 内部如下:

__init__.py
package.py

__init__.py 读取 name = 'package'package.py 包含包的所有内容。

编辑:我尝试使用各种不同版本的__init__.py,包括在name = 'package' 行下方添加import packageimport package.packageimport package.package as package,但都导致了相同的问题。

使用Packaging Python Projects 教程,我已经能够将我的包上传到TestPyPi,但是当我将包安装到我的计算机时,没有可用的功能/方法,并且当我运行“导入包”时并执行help(package),我得到以下信息:

Help on package package:

NAME
    package

PACKAGE CONTENTS
    package

DATA
    name = 'package'

FILE
    url/to/package

当我运行 import package.packagehelp(package) 时,我可以访问方法/函数,并获取包内容的预期帮助文本。

我的问题是,如何在我的计算机上配置包文件,以便在将包文件上传到 TestPyPi 然后下载后,import package 可以工作,而不需要运行import package.package

【问题讨论】:

    标签: python python-3.x package


    【解决方案1】:

    当您编写import package 时,您可以将package/__init__.py 中的名称作为package.foo 访问。

    因此,在__init__.py 中,如果您从package.py 导入所有必要的函数/变量/等,这些名称将对仅import package 的客户端可见。

    所以,如果你在package/__init__.py 有这个:

    from .package import (foo, bar, baz)
    

    然后在你的其他代码中你可以这样做:

    from package import foo
    

    而且你不必担心from package.package import foo

    【讨论】:

    • 按照我的设计方式,包中的所有内容都在package 文件中,包括帮助文本,所以这样做from .package import (all content in the package) 会出现问题。我对此有误解还是有其他方法可以解决?
    • 你可以使用from .package import *。或者只是将package.py 重命名为__init__.py
    猜你喜欢
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 2011-01-15
    • 2018-12-09
    • 2016-09-05
    相关资源
    最近更新 更多