【发布时间】:2010-11-11 15:16:38
【问题描述】:
请展示为 python 2.x 创建 python 包的简单且最新的标准方法
以后我更喜欢使用 pip 来安装包。
包应该包含一个类:
class hello:
def greet(self):
print "hello"
以后应该可以做到以下几点:
pip install my_package-0.1.1....
然后使用它:
from my_package import hello
h = hello.hello()
h.greet()
我要的是:
- 目录和文件布局
- 文件内容
- 创建可分发包文件的命令
- 从可分发包文件安装包的命令(最好使用 pip)
我找到了几个howtos,但我仍然不确定如何处理这个非常简单且精简的案例(没有嵌套包,删除所有文件和功能,对于最简单的案例可以省略),以及哪个是现代的方式。
我希望这个问题进入社区 wiki 状态,所以你不会得到任何分数,我会给予足够的时间,并会在几天后将答案标记为接受,同时考虑投票和 cmets。
编辑:
我想分享第一个正在运行的示例,我使用了 Marius Gedminas 的答案。它不包含应该存在的所有内容,但它确实有效,因此它可以展示技术流程的核心。要添加更多必要的部分,请阅读下面 Marius 的回答。
目录结构:
MyProject/
setup.py
my_package.py
README.txt
MANIFEST.in
setup.py:
from setuptools.import setup
setup(name='MyProject',
version='0.1',
py_modules=['my_package'])
my_package.py:
class hello:
def greet(self):
print "hello"
MANIFEST.in:
include *.txt
要从此文件夹创建包,请进入文件夹 MyProject 并运行:
$ python setup.py sdist
这将在子文件夹dist/ 中创建一个文件MyProject-0.1.tar.gz。将此文件复制到目标计算机上的文件夹中。
在目标机器上,在包含MyProject-0.1.tar.gz的文件夹中运行此命令:
sudo pip install MyProject-0.1.tar.gz
现在可能需要在目标机器上注销并重新登录,这样才能找到包。之后,您可以使用 python shell 在目标机器上测试该包:
$ python
>>> import my_package
>>> h = my_package.hello()
>>> h.greet()
hello
>>>
一旦成功,请记得添加其他必要的内容,请参阅下面 Marius 的回答。
【问题讨论】:
-
这个问题的重点是选择一种现代方法,然后剥离几乎所有可以剥离的东西,使其仍然有效。
标签: python packaging python-2.x