注意:
我有一个想要制作的简单包裹
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",
],
)
答案 0 :(得分:3)
使用我的项目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()
,实际上,没有理由分发名称需要与程序包名称匹配。