我有机会完成模块的python管理,每次都是一个挑战:包装不是人们每天所做的事情,它成为学习的负担,也是记忆的负担,即使你真的这样做,因为这通常发生一次.
我想在这里收集有关导入,包管理和分发如何在python中运行的权威概述,以便这个问题成为所有在幕后发生的魔术的明确解释.虽然我理解问题的广泛层面,但这些事情是如此交织在一起,以至于任何有针对性的答案都无法解决主要问题:了解所有工作是什么,什么是过时的,什么是当前的,什么是同一任务的替代品,什么是怪癖.
要引用的关键字列表如下,但这只是一堆样本.还有更多,欢迎您添加其他详细信息.
链接到其他答案可能是一个好主意.正如我所说,这个问题是为了高级概述.
std*_*err 11
在大多数情况下,这是试图查看包装/分销方面,而不是机械方面import.不幸的是,打包是Python提供多种方式的地方.我只是想让球滚动,希望其他人能帮我填补我的想法或指出错误.
首先,这里有一些杂乱的术语.包含__init__.py文件的目录是包.但是,我们在这里讨论的大部分内容都是在PyPI上发布的特定版本的软件包,其中一个是镜像,或者是特定于供应商的软件包管理系统,如Debian的Apt,Redhat的Yum,Fink,Macports,Homebrew或者ActiveState的pypm.
这些已发布的软件包正在尝试将"分发"称为"分发",试图仅将"Package"用作Python语言构造.您可以在PEP-376 PEP-376中看到一些用法.
现在,您的关键字列表与Python生态系统的几个不同方面有关:
以上是提供以各种格式发布Python发行版的地方的所有服务.有些像PyPI镜像和apt/yum存储库可以在您的本地计算机或公司网络中运行,但人们通常使用官方计算机.大多数(如果不是全部)提供工具(或PyPI的多个工具)来帮助查找和下载分发.
setuptools /分发distutilsDistutils是Python包编译并构建到发行版中的标准基础结构.有大量的功能,distutils但大多数人都知道:
from distutils.core import setup
setup(name='Distutils',
version='1.0',
description='Python Distribution Utilities',
author='Greg Ward',
author_email='gward@python.net',
url='http://www.python.org/sigs/distutils-sig/',
packages=['distutils', 'distutils.command'],
)
Run Code Online (Sandbox Code Playgroud)
在某种程度上,这是你需要的大部分内容.使用前面的9行代码,您可以获得足够的信息来安装纯Python包,以及在PyPI上发布该包所需的最小元数据.
Setuptools提供了支持Egg格式及其所有功能和缺陷所必需的钩子.分发是Setuptools的替代方案,它在尝试大多向后兼容时添加了一些功能.我相信Distribute将作为Distutil的继承者包含在Python 3中from distutils.core import setup.
Setuptools和Distribute都提供了一个自定义版本的distutilssetup命令,可以执行支持Egg格式等有用的操作.
通常将分发提供为源归档(tarball或zipfile).安装源代码分发的标准方法是下载和解压缩归档,然后在其中运行该setup.py文件.
例如,以下将下载,构建和安装Pygments语法高亮库:
curl -O -G http://pypi.python.org/packages/source/P/Pygments/Pygments-1.4.tar.gz
tar -zxvf Pygments-1.4.tar.gz
cd Pygments-1.4
python setup.py build
sudo python setup.py install
Run Code Online (Sandbox Code Playgroud)
或者,您可以下载Egg文件并进行安装.通常,这是通过使用easy_install或pip来完成的:
sudo easy_install pygments
or
sudo pip install pygments
Run Code Online (Sandbox Code Playgroud)
鸡蛋的灵感来自Java的Jarfiles,它们有很多你应该在这里阅读的功能
普通的python包只是一个包含__init__.py文件和任意数量的附加模块或子包的目录.Python也支持在*.zip文件中查找和加载源代码,只要它们包含在PYTHONPATH(sys.path)中即可.
easy_install:原蛋安装工具,取决于 setuptoolspip:目前最流行的安装python包的方法.类似easy_install但更灵活,并具有一些很好的功能,如需求文件,以帮助记录依赖关系和重现部署.pypm,apt,yum,芬克等bentobuildoutvirtualenv(和virtualenvwrapper)上述工具用于帮助自动化和管理Python项目的依赖项.基本上,它们为您提供工具来描述您的应用程序所需的发行版,并自动安装这些特定版本的依赖项.
PYTHONPATH默认情况下,安装python发行版会将其放入site-packages目录中.该目录通常是这样的/usr/lib/pythonX.Y/site-packages.
查找site-packages目录的简单编程方法:
from distuils import sysconfig
print sysconfig.get_python_lib()
Run Code Online (Sandbox Code Playgroud)
Python的import语句只能找到位于你的一个目录中的软件包PYTHONPATH.
您可以通过访问以下内容来检查和更改Python中的路径:
import sys
print sys.path
sys.path.append("/home/myname/lib")
Run Code Online (Sandbox Code Playgroud)
除此之外,您可以PYTHONPATH像操作系统上的任何其他环境变量一样设置环境变量,也可以使用:
PYTHONPATH读取的目录中,*.pth文件的每一行都添加到您的PYTHONPATH.基本上,只要你将包复制到PYTHONPATH你的目录上,你就可以创建一个mypackages.pth.阅读有关*.pth文件的更多信息: 站点模块site.py 修改要/home/myname/lib使用*.pth文件将上述内容添加到site-packages,您需要创建一个*.pth文件.文件的名称无关紧要,但你仍然应该选择合理的东西.
让我们创建myname.pth:
# myname.pth
/home/myname/lib
Run Code Online (Sandbox Code Playgroud)
而已.将其放入sysconfig.get_python_lib()您的系统或您的任何其他目录中PYTHONPATH,/home/myname/lib并将其添加到路径中.