编程语言
首页 > 编程语言> > Python3为PyPi准备包,不包括子模块

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

作者:互联网

笔记:

>我使用的是Python v3.6
>我已阅读有关Modules and Packages的文档
>我已阅读并完成了Packaging project tutorial
>我看了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就在哪里

class myClass:
    __init__(self):
        print('here')

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

name = "myPackage"

我成功地在pypi和pip上安装了它.

我可以导入myPackage但不像教程那样

example_pkg.name

作品,

myPackage.name

才不是.

上面链接的Sample项目在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
    ...

什么声音/ __ 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",
    ],
)

解决方法:

使用我的项目johnnydep检查分发的顶级导入名称是否正确:

# 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

你要踢自己.看起来你命名了这个发行版:

progil

但是您在源代码中命名了包

progril

pip安装程序和导入progril工作.您在设置时没有注意到,因为您使用了find_packages(),实际上,没有理由分发名称需要与包名匹配.

标签:python,python-3-x,pypi,python-module,python-packaging
来源: https://codeday.me/bug/20190627/1303690.html