首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建python2.x包-简单案例

如何创建python2.x包-简单案例
EN

Stack Overflow用户
提问于 2010-11-11 15:16:38
回答 2查看 7.6K关注 0票数 19

请展示为python2.x创建python包的简单和最新的标准方法

以后我更喜欢用pip来安装这个软件包。

包应该包含一个类:

代码语言:javascript
复制
class hello:
  def greet(self):
    print "hello"

一个人以后应该能够做以下事情:

代码语言:javascript
复制
pip install my_package-0.1.1....

然后用它:

代码语言:javascript
复制
from my_package import hello

h = hello.hello()
h.greet()

我想要的是:

  • 目录和文件布局
  • 文件内容
  • 命令创建可分发的包文件。
  • 命令从可分发的包文件中安装包(最好使用pip)。

我发现了几个方法,但我仍然不确定如何处理这个非常简单的、简化的情况(没有嵌套包、删除所有可以省略的文件和功能),这是现代的方法。

我希望这个问题能够进入社区wiki状态,这样你就不会得到任何分数,我会给出足够的时间,并在几天后标记一个被接受的答案,同时考虑投票和评论。

编辑:

我有一个第一个运行的例子,我想分享,我使用了马吕斯盖德米纳斯的答案。它并不包含应该存在的所有内容,但是它可以工作,因此它可以演示技术流程的核心。要增加更多必要的部分,请阅读下面的马吕斯的答案。

目录结构:

代码语言:javascript
复制
MyProject/
    setup.py
    my_package.py
    README.txt
    MANIFEST.in

setup.py:

代码语言:javascript
复制
from setuptools.import setup
setup(name='MyProject',
      version='0.1',
      py_modules=['my_package'])

my_package.py:

代码语言:javascript
复制
class hello:
  def greet(self):
    print "hello"

MANIFEST.in:

代码语言:javascript
复制
include *.txt

若要从此文件夹创建包,请进入文件夹MyProject并运行:

代码语言:javascript
复制
$ python setup.py sdist

这将在子文件夹MyProject-0.1.tar.gz中创建一个文件dist/。将此文件复制到目标计算机上的文件夹。

在目标计算机上,在包含MyProject-0.1.tar.gz的文件夹中运行此命令

代码语言:javascript
复制
sudo pip install MyProject-0.1.tar.gz

现在就有必要在目标机器上注销并重新登录,这样包就会被找到。之后,您可以使用python在目标机器上测试包:

代码语言:javascript
复制
$ python
>>> import my_package
>>> h = my_package.hello()
>>> h.greet()
hello
>>> 

一旦成功,请记住添加其他必要的内容,见下面的马吕斯的答案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-11 17:07:32

开始简单

最简单的单文件包:

代码语言:javascript
复制
MyProject/
    setup.py
    my_package.py

最简单的setup.py:

代码语言:javascript
复制
from setuptools import setup
setup(name='MyProject',
      version='0.1',
      author='Your Name',
      author_email='your.name@example.com',
      license='MIT',
      description='Example package that says hello',
      py_modules=['my_package'])

在包中包括额外的文件

接下来,您可能应该添加一个自述文件:

代码语言:javascript
复制
MyProject/
    MANIFEST.in
    README.rst
    setup.py
    my_package.py

注意新文件-- MANIFEST.in。它指定源发行版中应该包括哪些非Python文件:

代码语言:javascript
复制
include *.rst

人们会告诉你“哦,跳过清单,只需将文件添加到源代码管理,setuptools就会找到它们”。忽视这个建议,它太容易出错了。

使PyPI页面有用

让人们可以在上在线查看README.rst是很有用的。因此,请更改您的setup.py

代码语言:javascript
复制
from setuptools import setup
with open('README.rst') as f:
    readme = f.read()
setup(name='MyProject',
      ...
      description='Example package that says hello',
      long_description=readme,
      ...)

对更漂亮的页面使用ReStructuredText标记。使用

代码语言:javascript
复制
python setup.py --long-description | rst2html

尽早捕获ReStructuredText错误。

包中有多个Python模块

一个文件不会很快就足够了,所以将它更改为一个包(混淆的术语警告: package与带有__init__ py的目录中的相同,而不是像可分发的自包含存档中的那样):

代码语言:javascript
复制
MyProject/
    MANIFEST.in
    README.rst
    setup.py
    my_package/
        __init__.py
        some_module.py

并将setup.py更改为

代码语言:javascript
复制
from setuptools import setup, find_packages
with open('README.rst') as f:
    readme = f.read()
setup(name='MyProject',
      version='0.2',
      author='Your Name',
      author_email='your@email',
      license='MIT',
      description='Example package that says hello',
      long_description=readme,
      packages=find_packages())

向公众公布

获得一个PyPI帐户 --你只需要做一次。

若要发布版本,请确保setup.py中的版本号是正确的,然后运行

代码语言:javascript
复制
python setup.py sdist register upload

就这样。

告诉人们安装它

告诉他们

代码语言:javascript
复制
pip install MyProject

(在setup.py中指定的名称与要安装()的name参数相同)

票数 32
EN

Stack Overflow用户

发布于 2010-11-11 15:20:19

以下内容是从远程教程复制的。

文件布局:

代码语言:javascript
复制
top
|-- package
|   |-- __init__.py
|   |-- module.py
|   `-- things
|       |-- cross.png
|       |-- fplogo.png
|       `-- tick.png
|-- runner
|-- MANIFEST.in
|-- README
`-- setup.py

要使安装成为tarball,只需运行:

代码语言:javascript
复制
python setup.py sdist

若要安装软件包,请使用pipeasy_install

代码语言:javascript
复制
pip install my_package-1.2.3.tar.bz2

代码语言:javascript
复制
easy_install my_package-1.2.3.tar.bz2

此外,您还可以将它上传到PyPI,首先注册它:

代码语言:javascript
复制
python setup.py register

然后上传源tarball

代码语言:javascript
复制
python setup.py sdist upload

您也可以上传二进制鸡蛋(尽管不是必需的):

代码语言:javascript
复制
python setup.py bdist_egg upload

然后人们可以像这样安装它:

代码语言:javascript
复制
pip install my_package==1.2.3

或,

代码语言:javascript
复制
easy_install my_package==1.2.3
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4155914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档