如何创建简单的系统范围的python库?

3 python

我看到有一些内置包可以从任何脚本中导入,例如:

from datetime import date

today = date.today()
print today
Run Code Online (Sandbox Code Playgroud)

如何创建一个简单的程序包并将其添加到系统库中,以便像datetime上面的示例一样导入它?

gli*_*dud 6

如果您只是为自己制作一些东西而不担心打包,那么快速的方法是将模块(可以像单个文件一样简单)放在您的系统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']
Run Code Online (Sandbox Code Playgroud)

请注意该示例中的最后一项:/usr/lib/python3.4/site-packages。这就是你正在寻找的那种东西。所以在这个例子中,如果我将以下内容保存到/usr/lib/python3.4/site-packages/foo.py

def bar():
    print('Hello world!')
Run Code Online (Sandbox Code Playgroud)

然后从我系统上的任何地方:

>>> from foo import bar
>>> bar()
Hello world!
Run Code Online (Sandbox Code Playgroud)


ymb*_*rtt 5

您正在尝试制作一个模块。

首先安装setuptools软件包;在Windows或Linux上,您都应该能够pip install setuptools在终端上键入以进行安装。现在,您应该能够import setuptools在python提示符下编写而不会出现错误。

一旦完成,请设置一个目录结构,其中包含setup.py和,供您的项目代码进入。该目录必须包含一个名为的文件__init__.py,该文件使您可以import像访问文件一样进入目录。

some_folder/
|    setup.py
|    my_project/__init__.py
Run Code Online (Sandbox Code Playgroud)

在中setup.py,删除以下内容:

# setup.py
from setuptools import setup

setup(name="My Awesome Project",
      version="0.0",
      packages=["my_project"])
Run Code Online (Sandbox Code Playgroud)

在中my_project/__init__.py,放入一些您想导入的东西。比方说...

# my_project/__init__.py
greeting = "Hello world!"
Run Code Online (Sandbox Code Playgroud)

现在,为了在系统级安装项目,请运行python setup.py install。请注意,如果您使用的是Linux,则需要以root用户身份运行此文件,因为您正在更改系统范围的python库。

之后,您应该可以从任何您喜欢的目录运行python并输入:

>>> from my_project import greeting
>>> print greeting
Hello world!
>>>
Run Code Online (Sandbox Code Playgroud)

请注意,这足以告诉您如何制作模块,但是有很多事情setuptools可以为您效劳。请查看https://pythonhosted.org/setuptools/setuptools.html,以获取有关构建内容的更多信息,以及https://docs.python.org/2/tutorial/modules.html,以获取有关模块实际工作方式的更多信息。如果您想看一个(我希望)相当简单的软件包,那么几周前我在火车上制作了LazyLog模块,欢迎您使用它作为参考。