我如何创建一个简单的系统级Python库?
我如何创建一个简单的系统级Python库?
我注意到有一些内建包可以在任何脚本中导入,比如:
from datetime import date today = date.today() print today
我该如何创建一个简单的包并将其添加到系统库中,以便像上面的datetime
那样导入它?
如果你只是为了自己使用而不关心打包,最快捷的方法是将模块(可以是一个单独的文件)放置于系统的site-packages
目录中。(在基于Debian的系统中,你可能想使用dist-packages
代替)。
要查找site-packages
/dist-packages
目录所在位置,请打开Python并键入:
>>> from sys import path >>> path ['', '/usr/lib/python3.4/site-packages/pip-7.1.2-py3.4.egg', '/usr/lib/python34.zip', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-cygwin', '/usr/lib/python3.4/lib-dynload', '/usr/lib/python3.4/site-packages']
请注意上面示例中的最后一项:/usr/lib/python3.4/site-packages
。这就是你要查找的内容。所以,在这个例子中,如果我将以下内容保存到/usr/lib/python3.4/site-packages/foo.py
中:
def bar(): print('Hello world!')
那么,无论在我系统的哪个地方:
>>> from foo import bar >>> bar() Hello world!
你正在尝试制作一个模块。
首先需要安装setuptools
包; 无论是在Windows还是Linux上,您都应该能够在终端上输入pip install setuptools
来安装它。现在你应该能够在Python提示符下写入 import setuptools
而不会出现错误。
一旦这个工作正常,设置一个目录结构,其中包含一个setup.py
文件和一个放置项目代码的文件夹。目录必须包含一个名称为__init__.py
的文件,它允许您像导入文件一样import
目录。
some_folder/ | setup.py | my_project/__init__.py
在setup.py
中,插入以下内容:
# setup.py from setuptools import setup setup(name="My Awesome Project", version="0.0", packages=["my_project"])
在my_project/__init__.py
中,插入一些您想导入的内容。假设...
# my_project/__init__.py greeting = "Hello world!"
现在,为了在系统范围内安装项目,请运行python setup.py install
。请注意,如果您在Linux上,您需要以root身份运行此命令,因为您正在修改系统级别的Python库。
完成后,您应该能够从任何您喜欢的目录运行python,并键入:
>>> from my_project import greeting >>> print greeting Hello world! >>>
请注意,这已经足够告诉您如何制作模块,但setuptools
可以为您做更多的事情。请查看https://pythonhosted.org/setuptools/setuptools.html以获取有关构建内容的更多信息,以及https://docs.python.org/2/tutorial/modules.html以了解有关模块实际工作的更多信息。如果您想查看一个(我希望)相当简单的软件包,那么几个星期前我在一列车上做了我的LazyLog模块,您可以参考它。