Python3 为不包括子模块的 PyPi 准备包
Python3 preparing packages for PyPi not including submodules
备注:
- 我正在使用 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安装了它。
我可以 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",
],
)
使用我的项目检查发行版的顶级导入名称的完整性 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 安装 progil
并导入 progril
有效。您在设置时没有注意到,因为您使用了 find_packages()
,实际上,没有理由分发名称需要与包名称匹配。
备注:
- 我正在使用 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安装了它。
我可以 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",
],
)
使用我的项目检查发行版的顶级导入名称的完整性 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 安装 progil
并导入 progril
有效。您在设置时没有注意到,因为您使用了 find_packages()
,实际上,没有理由分发名称需要与包名称匹配。