Python3为PyPi准备包不包括子模块

2024-04-25 21:16:41 发布

您现在位置:Python中文网/ 问答频道 /正文

注意事项:

  1. 我使用的是pythonv3.6
  2. 我已经阅读了关于Modules and Packages的文档
  3. 我已经读过了Packaging project tutorial
  4. 我看过Sample Project(与教程项目不同)

我想做一个简单的包裹

myPackage/                      The project directory
    myPackage/                  Top-level package
      __init__.py               Initialize my package
      myClass.py                a file with a single class in it

    setup.py
    README.md
    ...
    dist/

其中myClass.py

^{pr2}$

我的myPackage/__init__.py文件就像演示一样

^{3}$

我已经成功地在pypi上安装了它。在

我可以import myPackage,但与教程不同的是

example_pkg.name

工作

myPackage.name

没有。在

上面链接的示例项目并没有详细说明init.py文件。在

所以我的问题是:

假设在模块和包的文档中有这样一个包:

sound/                          Top-level package
      __init__.py               Initialize the sound package
      formats/                  Subpackage for file format conversions
              __init__.py
              wavread.py
              wavwrite.py
              aiffread.py
              aiffwrite.py
              auread.py
              auwrite.py
              ...
      effects/                  Subpackage for sound effects
              __init__.py
              echo.py
              surround.py
              reverse.py
              ...
      filters/                  Subpackage for filters
              __init__.py
              equalizer.py
              vocoder.py
              karaoke.py
              ...

实际文件结构在哪里(遵循打包项目教程)

sound/
    sound/ (Top-level package)
        __init__.py
        ...
    dist/
    build/
    sound.egg/
    README.md
    ...

sound/__init__.py(或myPackage/__init__.py)中有什么可以导入它并访问其中的函数、子模块和类?在

很抱歉,我在python包装方面是个笨蛋。在

# contents of setup.py
import setuptools

with open("README.md", "r") as fh:
    long_description = fh.read()

setuptools.setup(
    name="progil",
    version="0.0.4",
    author="name",
    author_email="name@web",
    description="Progress In Line",
    long_description=long_description,
    long_description_content_type="text/markdown",
    url="https://pypi.org/project/progil/",
    packages=setuptools.find_packages(),
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
)

Tags: 项目namepyprojectpackageinittopsetup
1条回答
网友
1楼 · 发布于 2024-04-25 21:16:41

使用my projectjohnnydep检查分发的顶层导入名称是否正常:

# pip install johnnydep
$ johnnydep progil  fields name summary versions_available import_names
name    summary           versions_available    import_names
                                  
progil  Progress In Line  0.0.2, 0.0.3, 0.0.4   progril

你要踢自己。看起来您命名了分发:

^{pr2}$

但是你在源代码中命名了这个包

progril

pip安装progil和导入progril工作。您在安装时没有注意到,因为您使用了find_packages(),而且实际上,分发名不需要与包名匹配。在

相关问题 更多 >