精华内容
下载资源
问答
  • 它们都使用一个小的库来获取相关数字的XML状态输出。在我正在尝试将库和插件捆绑到一个Puppet可安装的RPM中。实际的RPM构建应该很简单;一旦我有了一个distutils-生成的distfile,我就可以根据从Dag或EPEL repos[1]...

    我有一些Munin插件,从自治数据库报告统计数据。它们都使用一个小的库来获取相关数字的XML状态输出。在

    我正在尝试将库和插件捆绑到一个Puppet可安装的RPM中。实际的RPM构建应该很简单;一旦我有了一个distutils-生成的distfile,我就可以根据从Dag或EPEL repos[1]压缩的.spec文件将其转换成RPM。这是我不确定的distutils位——事实上,我甚至不确定我的库是否正确地编写用于打包。其工作原理如下:

    偶像7统计.py公司名称:import datetime

    import os

    import stat

    import sys

    import time

    import urllib

    import xml.sax

    class IDOL7Stats:

    cache_dir = '/tmp'

    def __init__(self, host, port):

    self.host = host

    self.port = port

    # ...

    def collect(self):

    self.data = self.__parseXML(self.__getXML())

    def total_slots(self):

    return self.data['Service:Documents:TotalSlots']

    插件代码:

    ^{pr2}$

    我想我想要偶像7统计.py以/usr/lib/python2.4/site-packages/idol7stats或Python搜索路径中的其他内容结束。我需要什么魔法?这个:from distutils.core import setup

    setup(name = 'idol7stats',

    author = 'Me',

    author_email = 'me@example.com',

    version = '0.1',

    py_modules = ['idol7stats'])

    几乎可以工作,除了代码放在/usr/lib/python2.4/site-packages/idol7stats.py,而不是子目录中。我想这是因为我不理解Python中模块/包/其他容器之间的区别。在

    那么,有什么困难?在

    [1]是的,我可以使用RPM将库放入/usr/lib/python2.4/site-packages中,但我想知道如何打包Python代码。在

    展开全文
  • 那到底如何才能使得自己的库支持这样的安装方法呢?什么是pypi引用自官网:PyPI — the Python Package IndexThe Python Package Index is a repository of software for the Python programming language....

    平时我们安装各种python库的时候只需要一句命令: pip install xxx。那到底如何才能使得自己的库支持这样的安装方法呢?

    什么是pypi

    引用自官网:

    PyPI — the Python Package Index

    The Python Package Index is a repository of software for the Python programming language.

    创建账户

    注意server存在两种,也就对应两种账号

    PyPI Test

    省得麻烦,这里推荐两个账号都使用相同的邮箱和密码。

    创建配置文件

    在你的HOME目录下创建这个文件:.pypirc,这个文件保存着与PYPI服务器认证信息。

    内容大概长这样子:

    [distutils]

    index-servers =

    pypi

    pypitest

    [pypi]

    repository=https://pypi.python.org/pypi

    username=your_username

    password=your_password

    [pypitest]

    repository=https://testpypi.python.org/pypi

    username=your_username

    password=your_password

    准备你的包

    每一个PyPI上面的包都需要根目录下有这个文件:setup.py。如果你使用了一个markdown格式的README文件,你还需要包含文件setup.cfg。另外,你可能需要一个LICENSE.txt文件来描述你的代码使用许可申明。

    假设你正在构建一个库叫mypackage,你的目录结构看起来大概是这样:

    root-dir/ # arbitrary working directory name

    setup.py

    setup.cfg

    LICENSE.txt

    README.md

    mypackage/

    __init__.py

    foo.py

    bar.py

    baz.py

    setup.py

    这个是描述你库信息的信息。

    from distutils.core import setup

    setup(

    name = 'mypackage',

    packages = ['mypackage'], # this must be the same as the name above

    version = '0.1',

    description = 'A random test lib',

    author = 'Peter Downs',

    author_email = 'peterldowns@gmail.com',

    url = 'https://github.com/peterldowns/mypackage', # use the URL to the github repo

    download_url = 'https://github.com/peterldowns/mypackage/archive/0.1.tar.gz', # I'll explain this in a second

    keywords = ['testing', 'logging', 'example'], # arbitrary keywords

    classifiers = [],

    )

    download_url是你库代码托管位置的链接。Github可以帮你托管,但你必须创建一个git tag。在你的库中:git tag 0.1 -m "Adds a tag so that we can put this on PyPI."。然后,输入git tag显示一堆tags,其中你应该看到0.1。输入git push --tags origin master来提交关于最新的tag信息到Github上。Github将会创建用于下载的tarballs,其链接为https://github.com/{username}/{module_name}/archive/{tag}.tar.gz.

    setup.cfg

    这个文件告诉PyPi你的README文件在哪里:

    [metadata]

    description-file = README.md

    如果你使用一个markdown格式的readme文件,那这个文件是必须要有的。在上传的时候,你可能还会得到一些关于readme文件缺失的错误,忽视就可以了。如果你并不需要使用一个markdown格式的README,这里推荐使用reStructuredText (REST)。

    LICENSE.txt

    这个文件描述了你的代码使用什么样的license。我个人比较喜欢用 MIT license。

    上传包到PyPi Test

    运行:

    python setup.py register -r pypitest

    python setup.py sdist upload -r pypitest

    没有错误的话,你应该可以在 test PyPI repository上看到你的库了。

    上传包到PyPi Live

    一旦你成功地上传到PyPI Test后,你就可以用同样的步骤来上传到PyPI Live服务器:

    python setup.py register -r pypi

    python setup.py sdist upload -r pypi

    大功告成!你的第一个包发布啦!

    展开全文
  • 任务是包装和运输商业应用程序,其中包括:python库(由我们开发)一些依赖于上面库的python程序不是我们开发附加,而是我们库的附属。完整的python安装(python 2.6)其他语言附加内容、libs和程序。这里...

    我的任务是包装和运输商业应用程序包,其中包括:python库(由我们开发)

    一些依赖于上面库的python程序

    不是我们开发的附加库,而是我们库的附属库。

    完整的python安装(python 2.6)

    其他语言的附加内容、libs和程序。这里不需要担心,因为它们没有连接到上述机器上,而且当前的运输过程已经开始工作。

    该软件包已发送到Linux、OSX和Windows。在Linux上,它是作为一个简单的tar.gz分发的。用户只需在.bashrc中解压tar.gz和source一个提供的bash脚本,以便正确设置环境。在mac上,是dmg。在窗户上,我不知道。windows的家伙今天不在这里,但我看到的是一个可执行文件是以某种方式创建的。

    我现在将更详细地解释以上几点。

    我们的Python库

    我们不想提供源代码,所以只想提供编译过的python文件。一个更好的策略,使他们更防篡改是受欢迎的,即使它涉及到一些深层次的黑客攻击(例如,我曾经看到magic完成了从一个.zip中导入的东西是“损坏的”特别的)。目前这个库没有C级代码或类似的依赖于平台的代码,但这种情况很快就会改变。因此,我们必须提供特定于平台的编译.so和pyc。

    显然,这个库将与应用程序的其他部分一起在包中提供。因此,它将安装在下载的捆绑包上。因此,它必须是完全可重定位的,并且用户必须以某种方式(手动或通过env脚本)将未更正包的位置添加到PYTHONPATH,以便解释器能够找到它。

    我们的Python程序

    我们将在捆绑包中发布应用程序,这些应用程序将依赖于我们的库。这些应用程序的代码必须是用户可见的(以便他能够学习如何使用库接口),或者是不可见的(对于那些我们希望保持封闭源代码的实用程序),因此需要采用双重方法。

    其他库

    我们的库依赖于我们必须发布的第三方库,这样用户就可以在没有任何依赖性搜索的情况下启动并运行。显然,这些库将由我们在包中安装,但我们必须希望这些库不会在构建期间将安装路径存储在某个地方,因为这将使它们不可重新定位。

    我们的Python

    我们将发布我们的python版本,我们假设用户将运行该版本以访问我们的脚本。这是因为我们希望确保python版本正在运行。另外,我们可以修改一下可执行文件或标准库。我们可能会担心这个python与标准python的交互,如果用户想在python上安装一个特定的库,就必须将它安装在我们的捆绑包中,而不是安装在库的标准位置。

    请求

    我需要对这项任务下决心。我见过,但从来没有亲自做过,所以我需要你的观点。我在上面介绍的是我认为事情应该如何运作,根据目前的运作情况,但这可能是错误的。任何成功部署的提示、怪癖、建议或策略都是受欢迎的。考虑到这个问题的复杂性,我已经宣布根据我能得到的最佳答案,对它给予高额奖励。

    展开全文
  • 准备好你要发布代码(简单一个函数、一个类或者是一个你自己写功能模块代码),测试代码以及目录结构二、在pypi上发布python包步骤如下:1. 注册账号:到pypi(https://pypi.org/)上注册自己...

    使用Python编程中Python的包安装非常方便,一般都是可以pip来安装搞定:pip install ,我们自己写的python也可以发布在pypi上,很简单。

    一、准备工作

    1.准备好你要发布的代码(简单的一个函数、一个类或者是一个你自己写的功能模块代码),测试代码以及目录结构

    二、在pypi上发布python包步骤如下:

    1. 注册账号:到pypi(https://pypi.org/)上注册自己的用户, 点击“Register”,填写自己的用户名,密码,邮箱。

    如果期望测试发布,同时需要注册pypitest账号(可以采用相同的用户名和密码)。

    pypitest官网:https://test.pypi.org/

    记下自己的用户名、密码,后面上传包的时候需要用到。

    也可以创建用户验证文件:vi ~/.pypirc

    [distutils]

    index-servers =

    pypi

    [pypi]

    repository: https://upload.pypi.org/legacy/

    username: 用户名

    password: 密码

    或者

    [distutils]

    index-servers =

    pypi

    pypitest

    [pypi]

    repository: https://upload.pypi.org/legacy/

    username: 用户名

    password: 密码

    [pypitest]

    repository: https://test.pypi.org/legacy/

    username: 用户名

    password: 密码

    2.安装必要的库

    打包工作主要依赖python的setuptools的包来完成,可以使用pip安装它:

    pip install setuptools

    原则上安装了pip的环境都有setuptools,但并不影响你去尝试升级一下它。

    pip install --upgrade setuptools

    twine

    这是一个简化将库发布到Pypi上流程的工具,具体的使用之后会讲到。

    pip install twine

    3.准备setup.py/setup.conf文件,它是放在你包的根目录的,这一步至关重要,包括要发布的包名字,版本,license,描述,特性(classifier)等等。

    下面是setup.py文件的示例内容,基本上只需要在这个上面修改就行了,具体如下:

    #!/usr/bin/env python

    # coding:utf-8

    from setuptools import find_packages, setup

    setup(

    name=‘‘,

    version=‘‘,

    description=‘‘,

    long_description=open(‘README.rst‘).read(),

    author=‘‘,

    author_email=‘‘,

    maintainer=‘‘,

    maintainer_email=‘‘,

    packages=find_packages(),

    platforms=["all"],

    url=‘‘,

    license=‘BSD License‘,

    classifiers=[

    ‘Development Status :: 4 - Beta‘,

    ‘Operating System :: OS Independent‘,

    ‘Intended Audience :: Developers‘,

    ‘License :: OSI Approved :: BSD License‘,

    ‘Programming Language :: Python‘,

    ‘Programming Language :: Python :: 2.7‘,

    ‘Programming Language :: Python :: Implementation :: CPython‘,

    ‘Programming Language :: Python :: Implementation :: PyPy‘

    ],

    )

    简单字段说明:

    version:这个简单,就是包的发布的版本,可以直接写在这,也可以从其他地方引用过来。

    long_description:必须是rst(reStructuredText )格式的,因为这个里面的内容是显示在pypi包首页上,我的long_description是同目录下的README.rst的内容,同时这个README也是我的github项目首页。

    packages:申明你的包里面要包含的目录,比如 [‘mypackage‘, ‘mypackage_test‘] 可以是这种使用我的示例,让setuptools自动决定要包含哪些包

    install_requires:申明依赖包,安装包时pip会自动安装:格式如下(我上面的setup.py没有这个参数,因为我不依赖第三方包:)):

    也可以克隆已有仓库(推荐)

    大名鼎鼎的requests库的作者大神kennethreitz为大家准备了一个仓库作为一个setup.py的很好的模板,当然你也可以自己手写setup.py。

    git clone https://github.com/kennethreitz/setup.py

    4.如果有依赖包可以使用requirements.txt 和 test-requirements.txt申明包的依赖包和跑自动化测试的测试依赖包,具体格式示例如下:

    例如:

    mock>=2.0.0

    flake8>=3.2.1

    eventlet>=0.19.0

    nose2>=0.6.5

    cov_core>=1.15.0

    virtualenv>=15.1.0

    有了它们,结合tox等工具,可以非常方便的加入自动化测试。

    准备这个两个文件不是必须的。但是,有了它们,用户可以自己手动安装依赖包。

    安装依赖包

    pip install -r requirements.txt

    5.准备一个项目的README.rst文件,前面也提到了它的格式要求,第一次发包,可以直接copy别人的格式,这东西熟能生巧,多写就会了。

    最终的代码结构

    │ LICENSE

    │ MANIFEST.in

    │ README.rst

    │ setup.py

    └─condition_chain

    core.py

    __init__.py

    __version__.py

    6.编写核心代码

    接下来我们就可以编写自己的代码了,要注意源代码文件夹(仓库里的my_package文件夹)的名字与setup.py里配置的包名(Name)要一致。

    另外在重新上传之前我们要修改__version__.py里的版本号,以免覆盖了以前的上传(相信会有人是需要之前版本的库的)。

    7.打包上传

    准备好上面的步骤,一个包就基本完整了,剩下的就是打包了(cd到包的根目录):

    可以使用下面命令打包一个源代码的包:

    # 在当前目录的dist文件夹下,会生成一个以tar.gz结尾的包了。

    python setup.py sdist build

    也可以打包一个wheels格式的包,使用下面的命令搞定:

    # 在dist文件夹下生成一个whl文件。

    python setup.py bdist_wheel --universal

    上传生成的包,可以使用setuptools,或者twine上传,推荐使用twine上次,因为使用setuptools上传时,你的用户名和密码是明文或者未加密传输,安全起见还是使用twine吧。

    # 上传source 包

    python setup.py sdist upload

    # 上传pre-compiled包

    python setup.py bdist_wheel upload

    使用twine上传,先安装twine

    pip install twine

    上传

    twine upload dist/*

    会提示你前面注册的用户名和密码。一切搞定,你的包现在可以通过pip在任何地方安装了。

    报错解决:

    1.HTTPError: 403 Client Error: The user ‘xxx‘ isn‘t allowed to upload to project ‘‘. See https://pypi.org/help/#project-name for more information. for url: https://upload.pypi.org/legacy/

    出现这个报错一般是python包名冲突,换个包名就可以了

    2.HTTPError: 403 Client Error: Invalid or non-existent authentication information. for url: https://upload.pypi.org/legacy/

    出现这个报错一般是用户名和密码错误了,要去网站上验证一下你前面注册的用户名和密码。

    Ps:

    1.pip的安装官方教程:https://pip.pypa.io/en/stable/installing/

    2.rst的语法可以参考:http://rest-sphinx-memo.readthedocs.io/en/latest/ReST.html

    3.对于一个包,需要长久维护,自动测试建议加入,可以使用tox和与第三方CI的集成。

    展开全文
  • Python模块、扩展和应用程序可以按以下几种形式进行打包和发布python setup.py获取帮助方式python setup.py --helppython setup.py --help-commands 所有可以使用命令,如build,installpython setup.py ...
  • 前言昨天把自己VASP文件处理进行了打包并上传到PyPI,现在可以直接通过pip和easy_install来安装VASPy啦(同时欢迎使用VASP做计算化学童鞋们加星和参与进来),由于自己记性真是不咋地,怕时间久了就忘了,...
  • 【填空题】Python3.4以后版本中,____________用于安装管理Python扩展包,________________用于发布Python包。【判断题】Directions: The following exercises will test your understanding of the concepts ...
  • 前言昨天把自己VASP文件处理进行了打包并上传到PyPI,现在可以直接通过pip和easy_install来安装VASPy啦(同时欢迎使用VASP做计算化学童鞋们加星和参与进来),由于自己记性真是不咋地,怕时间久了就忘了,于是...
  • 码农们你们好,这篇帖子将带你们温习打包与发布的Python库的基础知识。所以不要浪费时间了,咱们开始吧! 文件夹结构 要事第一。你文件夹结构应该是什么样?至少你可以有两个文件。第一个文件是setup.py文件,...
  • 背景有个私有仓储,地址为https://your.repo.com/pypi/代码存储在gitlab, 地址为https://gitlab.company.com/software.gitCI为jenkins常规解决手法jenkins有一个特定节点,节点里面已经配置好了%HOMEPATH%/.pypirc...
  • 主流的编程语言都有非常强大的管理工具和便捷的库下载方式,Python 就有 pip 工具,一行命令就可以下载所需要的依赖库。pip install requests俗话说得好:轮子用的好,头发不会少。但是当我们开发到一定的阶段,...
  • Python项目打包发布方法

    万次阅读 多人点赞 2018-12-29 11:56:07
    在windows下,大小为几十K的源文件打包成exe文件,可能为几十兆,原因是把程序所引用的库文件也一起打包在一起。 如下以windows系统为例,分2个步骤,演示如何使用pyinstaller打包。 第1步:安装py...
  • 用于构建python软件包并发布到pypi模板存储。 指示 重命名package/ 更新setup.py from setuptools import setup , find_packages from package import __version__ # rename package here long_description = ...
  • 1. PyPi用途Python中我们经常会用到第三方的包,默认情况下,用到第三方工具基本都是从Pypi.org里面下载。我们举个栗子: 如果你希望用Python实现一个金融量化分析工具,目前比较好用金融数据来源是 Yahoo 和...
  • 手动管理版本手动管理Python包的版本,需要注意两个方面:每次发布新包前,要更新包的版本号。在安装后的默认模块下应该有一个__version__变量,其值为版本号。除了手动修改两个版本号这种愚蠢的方案以外,要保持...
  • 最近项目中使用一个python SDK封装C SDK版本太低了,有bug,因此需要使用最新版本C SDK重新编译python SDK,但是在替换为新C SDK后执行编译时发现有报错,原来的python ...打包python库遇到问题pypito...
  • 发布的Python包

    2017-02-06 15:26:19
    disutils从1998年便已经是python标准库的一部分。它最早由Greg Ward开发。 在2000年开发停止,从那以后,一些开发人员开始在其基础上继续开发他们自己工具。其中 最成功继任者便是打包setuptools 使用...
  • 发布的python包

    2016-08-02 15:50:00
    disutils从1998年便已经是python标准库的一部分。它最早由Greg Ward开发。 在2000年开发停止,从那以后,一些开发人员开始在其基础上继续开发他们自己工具。其中 最成功继任者便是打包setuptools 使用...
  • 1.首先要明白,pypi有测试服和正式服,我们尝试把自己的包发布到测试服上。然后需要一次邮箱确认,然后呢我来添加一个api token,在上传我们的库时需要用到。3. 接下来,创建一个setup.py,当然你得setuptools这个库...
  • 码农们你们好,这篇帖子将带你们温习打包与发布的Python库的基础知识。所以不要浪费时间了,咱们开始吧! 文件夹结构 要事第一。你文件夹结构应该是什么样?至少你可以有两个文件。第一个文件是setup.py文件,...
  • 展开全部什么是pypi简单的说pypi是一个python包的仓库,里面32313133353236313431303231363533e59b9ee7ad9431333365636561有很多别人写好的python,你可以通过easy_install或者pip进行安装,方便用户更方面的使用你...
  • 前言 昨天把自己的VASP文件处理进行了打包并上传到PyPI,现在可以直接通过pip和easy_install来安装VASPy啦(同时欢迎使用VASP做计算化学的童鞋们加星...首先写贴上来VASPy包的整个文件结构, 后面的内容都是以此为例进
  • 问题使用Ubuntu系统或者其他基于deb管理器系统的人,经常通过apt-get install命令来安装Python的库。不知道你们是否注意到,通过这个命令安装Python库后,也会自动生成对应的.pyc文件。但是通过synaptic程序或者...
  • 在 GitHub 操作 仓库中自动化、自定义和执行软件开发工作流程。 您可以发现、创建和共享操作以执行您喜欢任何作业(包括 CI/CD),并将操作合并到完全自定义工作流程中。公共仓库免费使用 GitHub 操作简言之,...
  • 最近静极思动,着手做一个好用工具开源一下,所以对Python发布包到pypi流程研究了一下,这里做一下简单整理记录。当然由于Python更新发展速度很快,PyPI的发布机制也不断更新,可能方法会生效,有需要...
  • 前言昨天把自己VASP文件处理进行了打包并上传到PyPI,现在可以直接通过pip和easy_install来安装VASPy啦(同时欢迎使用VASP做计算化学童鞋们加星和参与进来),由于自己记性真是不咋地,怕时间久了就忘了,于是...
  • 在标准与每个Python版本一起测试和发布,作为这个版本一部分(而不是作为一个添加或扩展)。在所以,是,如果用户安装了Python,您可以期望这些库存在。只是根据定义。在关于内置库的升级:不,您不能这样做。...
  • 一个.py文件就是一个python模块,一个包含__init.py文件的文件夹就是一个python包(包和模块的具体区别这这里)。 如果我们要把自己写好的文件用git进行版本管理,需要用git init命令这包的文件夹内创建一个.git的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,206
精华内容 482
关键字:

发布python包的库

python 订阅