设置包
正如@ThomasK 所说,最简单的方法是使用一个包。如果您命名您的包peewee
,那么您可以编辑顶级__init__.py
文件以允许用户继续以与以前相同的方式使用您的包。
首先,您的包和子文件夹的目录结构:
peewee/
__init__.py
peewee.py
extras/
__init__.py
foo.py
bar.py
__init__.py
档案_
接下来,您需要在顶层添加几行__init__.py
.
您可以采用快速而肮脏的方法,只需包括:
from peewee.peewee import *
这会将所有内容都放在peewee.py
包的顶级命名空间中。或者,您可以采用更传统的替代方案,并仅显式导入那些应该位于顶层的方法。
from peewee.peewee import funtion1, class1,...
并且,为了向后兼容,您可以__all__
将模块的属性显式设置为仅包含 peewee
__all__ = ['peewee']
from peewee import *
如果他们真的需要,这将让人们继续使用。
写一个setup.py
文件
最后,您还必须设置一些安装脚本等。Zed Shaw 的Learn Python The Hard Way 练习 46有一个简单而清晰的项目框架,您应该使用它。
最重要的部分是setup.py
文件。示例页面并不太长,Zed 为制作一本非常棒的书付出了很多努力,所以我不打算在此处重新发布它(尽管整本书都是免费的)。您还可以阅读更长的说明/文档来为 distutils 编写 setup.py 文件,但是 LPTHW 将为您提供一些可以快速轻松地完成您想要的一切的东西。
总包目录结构
请注意,您的最终目录结构实际上会更大一些(名称peewee-pkg
无关紧要,bin
是可选的——子文件夹的名称很重要)
peewee-pkg/
setup.py
bin
peewee/
__init__.py
peewee.py
extras/
__init__.py
foo.py
bar.py
安装和使用
之后,如果您愿意,您实际上可以将您的包发布到 PyPi,或者您可以直接将其分发给用户。他们需要做的就是运行:
python setup.py install
一切都将提供给他们。
导入后安装
最后,如果您peewee/__init__.py
如前所述在文件中执行特定导入,您的用户仍然可以执行以下操作:
from peewee import function1, class1, ...
但现在他们也可以import peewee.extras
用来获取额外功能(或import peewee.extras.foo as foo
或from pewee.extras.foo import extra_awesome
)等。而且,正如您在问题中所问的那样,他们也可以:
from pewee.extras import foo
foo
然后像文件在当前目录中一样访问's 函数。
开发包的有用说明
在您的计算机上,您应该运行:
python setup.py develop
这会将软件包安装到您的路径中,就像使用python setup.py install
; 但是,develop
它告诉 python 每次使用该模块时都要重新检查文件,这样每次您进行更改时,它们都会立即提供给系统进行测试。