精华内容
下载资源
问答
  • Python依赖打包发布详细

    千次阅读 2017-08-25 00:10:21
    它的发布方式:.py文件:对于开源项目或者源码没那么重要的,直接提供源码,需要使用者自行安装Python并且安装依赖的各种库。(Python官方的各种安装包就是这样做的).pyc文件:有些公司或个人因为机密或者各种原因...

    将Python脚本打包成可执行文件

    Python是一个脚本语言,被解释器解释执行。它的发布方式:

    .py文件:对于开源项目或者源码没那么重要的,直接提供源码,需要使用者自行安装Python并且安装依赖的各种库。(Python官方的各种安装包就是这样做的)

    .pyc文件:有些公司或个人因为机密或者各种原因,不愿意源码被运行者看到,可以使用pyc文件发布,pyc文件是Python解释器可以识别的二进制码,故发布后也是跨平台的,需要使用者安装相应版本的Python和依赖库。

    可执行文件:对于非码农用户或者一些小白用户,你让他装个Python同时还要折腾一堆依赖库,那简直是个灾难。对于此类用户,最简单的方式就是提供一个可执行文件,只需要把用法告诉Ta即可。比较麻烦的是需要针对不同平台需要打包不同的可执行文件(Windows,Linux,Mac,…)。

    本文主要就是介绍最后一种方式,.py和.pyc都比较简单,Python本身就可以搞定。将Python脚本打包成可执行文件有多种方式,本文重点介绍PyInstaller,其它仅作比较和参考。

    Freezing Your Code

    各种打包工具的对比如下(来自文章Freezing Your Code):

    Solution Windows Linux OS X Python 3 License One-file mode Zipfile import Eggs pkg_resources support
    bbFreeze yes yes yes no MIT no yes yes yes
    py2exe yes no no yes MIT yes yes no no
    pyInstaller yes yes yes no GPL yes no yes no
    cx_Freeze yes yes yes yes PSF no yes yes no
    py2app no no yes yes MIT no yes yes yes
    PS.其中pyInstaller和cx_Freeze都是不错的,stackoverflow上也有人建议用cx_Freeze,说是更便捷些。pkg_resources新版的pyInstaller貌似是支持的。

    安装PyInstaller

    对于那些网络比较稳定,能够流畅使用pip源地址的用户,直接下面的命令就可以搞定:

    pip install pyinstaller
    通常我们会下载源码包,然后进入包目录,执行下面的命令(需要安装setuptools):

    python setup.py install
    安装完后,检查安装成功与否:

    pyinstaller --version
    安装成功后,就可以使用下面的命令了:

    pyinstaller : 打包可执行文件的主要命令,详细用法下面会介绍。
    pyi-archive_viewer : 查看可执行包里面的文件列表。
    pyi-bindepend : 查看可执行文件依赖的动态库(.so或.dll文件)
    pyi-… : 等等。
    使用PyInstaller

    pyinstaller的语法:

    pyinstaller [options] script [script …] | specfile
    最简单的用法,在和myscript.py同目录下执行命令:

    pyinstaller mycript.py
    然后会看到新增加了两个目录build和dist,dist下面的文件就是可以发布的可执行文件,对于上面的命令你会发现dist目录下面有一堆文件,各种都动态库文件和myscrip可执行文件。有时这样感觉比较麻烦,需要打包dist下面的所有东西才能发布,万一丢掉一个动态库就无法运行了,好在pyInstaller支持单文件模式,只需要执行:

    pyinstaller -F mycript.py
    你会发现dist下面只有一个可执行文件,这个单文件就可以发布了,可以运行在你正在使用的操作系统类似的系统的下面。

    当然,pyinstaller还有各种选项,有通用选项,如-d选项用于debug,了解pyInstaller执行的过程;还有一些针对不同平台的选项,具体用法可以访问PyInstaller官方WIKI。

    在执行pyInstaller命令的时候,会在和脚本相同目录下,生成一个.spec文件,该文件会告诉pyinstaller如何处理你的所有脚本,同时包含了命令选项。一般我们不用去理会这个文件,若需要打包数据文件,或者给打包的二进制增加一些Python的运行时选项时…一些高级打包选项时,需要手动编辑.spec文件。可以使用:

    pyi-makespec options script [script …]
    创建一个.spec文件,对于手动编辑的.spec文件,我们可以使用下面任意一条命令:

    pyinstaller specfile
    pyi-build specfile
    PyInstaller的原理简介

    PyInstaller其实就是把python解析器和你自己的脚本打包成一个可执行的文件,和编译成真正的机器码完全是两回事,所以千万不要指望成打包成一个可执行文件会提高运行效率,相反可能会降低运行效率,好处就是在运行者的机器上不用安装python和你的脚本依赖的库。在Linux操作系统下,它主要用的binutil工具包里面的ldd和objdump命令。

    PyInstaller输入你指定的的脚本,首先分析脚本所依赖的其他脚本,然后去查找,复制,把所有相关的脚本收集起来,包括Python解析器,然后把这些文件放在一个目录下,或者打包进一个可执行文件里面。

    可以直接发布输出的整个文件夹里面的文件,或者生成的可执行文件。你只需要告诉用户,你的应用App是自我包含的,不需要安装其他包,或某个版本的Python,就可以直接运行了。

    需要注意的是,PyInstaller打包的执行文件,只能在和打包机器系统同样的环境下。也就是说,不具备可移植性,若需要在不同系统上运行,就必须针对该平台进行打包。

    参考资料

    Freezing Your Code
    PyInstaller官方WIKI
    PyInstaller源码

    在这里插入图片描述

    展开全文
  • 如果我们的项目依赖第三方的jar,例如commons logging,那么问题来了:commons logging发布的jar在哪下载?如果我们还希望依赖log4j,那么使用log4j需要哪些jar?类似的依赖还包括:JUnit,JavaMail,MySQL...

    如果我们的项目依赖第三方的jar包,例如commons logging,那么问题来了:commons logging发布的jar包在哪下载?

    如果我们还希望依赖log4j,那么使用log4j需要哪些jar包?

    类似的依赖还包括:JUnit,JavaMail,MySQL驱动等等,一个可行的方法是通过搜索引擎搜索到项目的官网,然后手动下载zip包,解压,放入classpath。但是,这个过程非常繁琐。

    Maven解决了依赖管理问题。例如,我们的项目依赖abc这个jar包,而abc又依赖xyz这个jar包:

    ┌──────────────┐

    │Sample Project│

    └──────────────┘

    ┌──────────────┐

    │ abc │

    └──────────────┘

    ┌──────────────┐

    │ xyz │

    └──────────────┘

    当我们声明了abc的依赖时,Maven自动把abc和xyz都加入了我们的项目依赖,不需要我们自己去研究abc是否需要依赖xyz。

    因此,Maven的第一个作用就是解决依赖管理。我们声明了自己的项目需要abc,Maven会自动导入abc的jar包,再判断出abc需要xyz,又会自动导入xyz的jar包,这样,最终我们的项目会依赖abc和xyz两个jar包。

    我们来看一个复杂依赖示例:

    org.springframework.boot

    spring-boot-starter-web

    1.4.2.RELEASE

    当我们声明一个spring-boot-starter-web依赖时,Maven会自动解析并判断最终需要大概二三十个其他依赖:

    spring-boot-starter-web

    spring-boot-starter

    spring-boot

    sprint-boot-autoconfigure

    spring-boot-starter-logging

    logback-classic

    logback-core

    slf4j-api

    jcl-over-slf4j

    slf4j-api

    jul-to-slf4j

    slf4j-api

    log4j-over-slf4j

    slf4j-api

    spring-core

    snakeyaml

    spring-boot-starter-tomcat

    tomcat-embed-core

    tomcat-embed-el

    tomcat-embed-websocket

    tomcat-embed-core

    jackson-databind

    ...

    如果我们自己去手动管理这些依赖是非常费时费力的,而且出错的概率很大。

    依赖关系

    Maven定义了几种依赖关系,分别是compile、test、runtime和provided:

    scope说明示例

    compile编译时需要用到该jar包(默认)commons-logging

    test编译Test时需要用到该jar包junit

    runtime编译时不需要,但运行时需要用到mysql

    provided编译时需要用到,但运行时由JDK或某个服务器提供servlet-api

    其中,默认的compile是最常用的,Maven会把这种类型的依赖直接放入classpath。

    test依赖表示仅在测试时使用,正常运行时并不需要。最常用的test依赖就是JUnit:

    org.junit.jupiter

    junit-jupiter-api

    5.3.2

    test

    runtime依赖表示编译时不需要,但运行时需要。最典型的runtime依赖是JDBC驱动,例如MySQL驱动:

    mysql

    mysql-connector-java

    5.1.48

    runtime

    provided依赖表示编译时需要,但运行时不需要。最典型的provided依赖是Servlet API,编译的时候需要,但是运行时,Servlet服务器内置了相关的jar,所以运行期不需要:

    javax.servlet

    javax.servlet-api

    4.0.0

    provided

    最后一个问题是,Maven如何知道从何处下载所需的依赖?也就是相关的jar包?答案是Maven维护了一个中央仓库(repo1.maven.org),所有第三方库将自身的jar以及相关信息上传至中央仓库,Maven就可以从中央仓库把所需依赖下载到本地。

    Maven并不会每次都从中央仓库下载jar包。一个jar包一旦被下载过,就会被Maven自动缓存在本地目录(用户主目录的.m2目录),所以,除了第一次编译时因为下载需要时间会比较慢,后续过程因为有本地缓存,并不会重复下载相同的jar包。

    唯一ID

    对于某个依赖,Maven只需要3个变量即可唯一确定某个jar包:

    groupId:属于组织的名称,类似Java的包名;

    artifactId:该jar包自身的名称,类似Java的类名;

    version:该jar包的版本。

    通过上述3个变量,即可唯一确定某个jar包。Maven通过对jar包进行PGP签名确保任何一个jar包一经发布就无法修改。修改已发布jar包的唯一方法是发布一个新版本。

    因此,某个jar包一旦被Maven下载过,即可永久地安全缓存在本地。

    注:只有以-SNAPSHOT结尾的版本号会被Maven视为开发版本,开发版本每次都会重复下载,这种SNAPSHOT版本只能用于内部私有的Maven repo,公开发布的版本不允许出现SNAPSHOT。

    Maven镜像

    除了可以从Maven的中央仓库下载外,还可以从Maven的镜像仓库下载。如果访问Maven的中央仓库非常慢,我们可以选择一个速度较快的Maven的镜像仓库。Maven镜像仓库定期从中央仓库同步:

    slow ┌───────────────────┐

    ┌─────────────>│Maven Central Repo.│

    │ └───────────────────┘

    │ │

    │ │sync

    │ ▼

    ┌───────┐ fast ┌───────────────────┐

    │ User │─────────>│Maven Mirror Repo. │

    └───────┘ └───────────────────┘

    中国区用户可以使用阿里云提供的Maven镜像仓库。使用Maven镜像仓库需要一个配置,在用户主目录下进入.m2目录,创建一个settings.xml配置文件,内容如下:

    aliyun

    aliyun

    central

    http://maven.aliyun.com/nexus/content/groups/public/

    配置镜像仓库后,Maven的下载速度就会非常快。

    搜索第三方组件

    最后一个问题:如果我们要引用一个第三方组件,比如okhttp,如何确切地获得它的groupId、artifactId和version?方法是通过search.maven.org搜索关键字,找到对应的组件后,直接复制:

    命令行编译

    在命令中,进入到pom.xml所在目录,输入以下命令:

    $ mvn clean package

    如果一切顺利,即可在target目录下获得编译后自动打包的jar。

    在IDE中使用Maven

    几乎所有的IDE都内置了对Maven的支持。在Eclipse中,可以直接创建或导入Maven项目。如果导入后的Maven项目有错误,可以尝试选择项目后点击右键,选择Maven - Update Project...更新:

    练习

    小结

    Maven通过解析依赖关系确定项目所需的jar包,常用的4种scope有:compile(默认),test,runtime和provided;

    Maven从中央仓库下载所需的jar包并缓存在本地;

    可以通过镜像仓库加速下载。

    展开全文
  • poetry是一个Python虚拟环境和依赖管理的工具,之前用pipenv,最近学习httprunner时,接触了poetry。poetry和pipenv类似,另外还提供了打包和发布的功能。官方文档:python-poetry.org/docs/python项目部署:poetry...

    poetry是一个Python虚拟环境和依赖管理的工具,之前用pipenv,最近学习httprunner时,接触了poetry。poetry和pipenv类似,另外还提供了打包和发布的功能。

    官方文档:python-poetry.org/docs/

    python项目部署:poetry管理本地环境,上线用docker

    poetry安装

    poetry提供多种安装方式,个人推荐从以下2种方式中选择:

    方式一:(推荐)

    $ curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python

    方式二:(pip)

    $ pip install --user poetry

    工程初始化

    如果当前还没有创建工程,可以使用poetry新建工程:

    输入poetry new来创建一个项目脚手架,包括基本结构、pyproject.toml文件。

    $ poetry new poetry-demo

    这时候,会创建一个包含如下内容的工程,

    poetry-demo

    ├── pyproject.toml

    ├── README.rst

    ├── poetry_demo

    │ └── __init__.py

    └── tests

    ├── __init__.py

    └── test_poetry_demo.py

    除了新建工程,还可以在已有工程的基础上进行创建,

    $ poetry init

    这时候,它会让你输入包名称、版本号等信息,你可以选择输入,也可以选择按下ENTER键使用默认值,完成以后,pyproject.toml如以下格式:

    name = "poetry-demo"version= "0.1.0"description= ""authors= ["wenli"]

    [tool.poetry.dependencies]

    python= "*"[tool.poetry.dev-dependencies]

    pytest= "^3.4"

    依赖包管理

    安装依赖包

    可以使用install命令直接解析并安装pyproject.toml的依赖包

    $ poetry install

    pyproject.toml文件的配置如下:

    [tool.poetry.dependencies]

    pendulum= "^1.4"

    也可以可以使用add命令来安装一款Python工具包,

    $ poetry add numpy

    还可以,通过添加配置参数--dev来区分不同环境下的依赖包。

    详细:

    poetry add flask :安装最新稳定版本的flask

    poetry add pytest --dev : 指定为开发依赖,会写到pyproject.toml中的[tool.poetry.dev-dependencies]区域

    poetry add flask=2.22.0 : 指定具体的版本

    poetry install : 安装pyproject.toml文件中的全部依赖

    poetry install --no-dev : 只安装非development环境的依赖,一般部署时使用

    更新所有锁定版本的依赖包

    $ poetry update

    更新指定依赖包

    $ poetry update numpy

    卸载依赖包

    $ poetry remove numpy

    查看可以更新的依赖

    $ poetry show --outdated

    查看项目安装的依赖

    $ poetry show

    树形结构查看项目安装的依赖

    $ poetry show -t

    虚拟环境管理

    创建虚拟环境

    创建虚拟环境有2种方式:

    方式1:

    如果在配置文件中配置了virtualenvs.create=true,执行poetry install时会检查是否有虚拟环境,否则会自动创建。

    方式2:

    指定创建虚拟环境时使用的Python解释器版本

    $ poetry env use python3.7

    激活虚拟环境

    $ poetry shell

    查看虚拟环境信息

    $ poetry env info

    显示虚拟环境列表

    $ poetry env list

    显示虚拟环境绝对路径

    $ poetry env list --full-path

    删除虚拟环境

    $ poetry env remove python3.7

    查看python版本

    $ poetry run python -V

    展开全文
  • 本文作者写了一份在 GitHub 上发布 python 的简单分步指南。作者以 SciTime 项目(一个对算法训练时间进行估计的)的发布为例,详细解释了发布的每个步骤。注意:本文假设你在 GitHub 上已经有一个...
    436d82814aa8faf39347ea409e2b69d7.png

    编译:机器之心,作者:Gabriel Lerner、Nathan Toubiana

    好不容易码了个 python 项目,是不是很兴奋?那么怎么把这个项目发出去让大家看到呢?本文作者写了一份在 GitHub 上发布 python 包的简单分步指南。

    作者以 SciTime 项目(一个对算法训练时间进行估计的包)的发布为例,详细解释了发布的每个步骤。

    注意:本文假设你在 GitHub 上已经有一个想要打包和发布的项目。

    第 0 步:获取项目许可证

    在做其他事之前,由于你的项目要开源,因此应该有一个许可证。获取哪种许可证取决于项目包的使用方式。开源项目中一些常见许可证有 MIT 或 BSD。

    要在项目中添加许可证,只需参照以下链接中的步骤,将 LICENSE 文件添加到项目库中的根目录即可:https://help.github.com/en/articles/adding-a-license-to-a-repository

    第 1 步:让你的代码准备就绪

    要将项目进行打包,你需要做一些预备工作:

    • 让你的项目结构正确就位。通常情况下,项目库的根目录包含一个以项目名称命名的文件夹,项目的核心代码应该位于此文件夹中。在这个文件夹之外是运行和构建包(测试、文档等)所需的其他代码。

    • 核心文件夹应包括一个(或多个)模块和一个 __init__.py 文件,该文件包含你希望让终端用户访问的类/函数。此文件还可以包含包的版本,以便于终端用户访问。

    •  理想情况下,应使用 logging 包来设置合理的日志记录系统(而不是用 prints 输出)。

    •  理想情况下,应将你的核心代码分配到一个或多个类中。

    from .estimate import Estimator

    以__init__.py 为例,如果 Estimator 是终端用户将会访问的类(该类在 estimate.py 文件中定义)

    import logging


    class LogMixin(object):
        @propertydef logger(self):name 
    '.'.join([self.__module__, self.__class__.__name__])
            FORMAT = '%(name)s:%(levelname)s:%(message)s'
            logging.basicConfig(format=FORMAT, level=logging.DEBUG)
            logger = logging.getLogger(name)
            return logger

    以日志系统为例:LogMixin 类可以在其他任何类中使用

    第 2 步:使用打包工具创建 setup.py

    在你的项目有了一套结构之后,你应该在项目库的根目录下添加 setup.py 文件。这有助于所有发布和版本维护过程的自动化。以下是 setup.py 的例子(源代码:https://github.com/nathan-toubiana/scitime/blob/master/setup.py)。

    from setuptools import setup
    from os import path

    DIR = path.dirname(path.abspath(__file__))
    INSTALL_PACKAGES = open(path.join(DIR, 'requirements.txt')).read().splitlines()

    with open(path.join(DIR, 'README.md')) as f:
        README = f.read()

    setup(
        name='scitime',
        packages=['scitime'],
        description="Training time estimator for scikit-learn algorithms",
        long_description=README,
        long_description_content_type='text/markdown',
        install_requires=INSTALL_PACKAGES,
        version='0.0.2',
        url='http://github.com/nathan-toubiana/scitime',
        author='Gabriel Lerner & Nathan Toubiana',
        author_email='toubiana.nathan@gmail.com',
        keywords=['machine-learning''scikit-learn''training-time'],
        tests_require=[
            'pytest',
            'pytest-cov',
            'pytest-sugar'
        ],
        package_data={
            # include json and pkl files
            '': ['*.json''models/*.pkl''models/*.json'],
        },
        include_package_data=True,
        python_requires='>=3'
    )

    setup.py 文件的示例

    几点注意事项:

    • 如果你的包有依赖项,处理这些依赖项的简单方法是在配置文件中通过 install_requires 参数来添加依赖项(如果列表很长,你可以像之前那样指向一个 requirement.txt 文件)。

    • 如果你希望在任何人安装包时(从项目库中)下载元数据,则应通过 package_data 参数来添加这些元数据。

    • 有关 setup() 函数的更多信息,请参见:https://setuptools.readthedocs.io/en/latest/setuptools.html

    注意:第 3 步到第 6 步是可选的(但强烈推荐),但是如果你现在马上想发布你的包,可以直接跳到第 7 步。

    第 3 步:设置本地测试和检查测试覆盖率

    此时还没有完成,你的项目还应该有单元测试。尽管有许多框架能帮助你做到,但一种简单的方法是使用 pytest。所有测试都应该放在一个专用的文件夹中(例如名为 tests/或 testing 的文件夹)。在这个文件夹中放置你需要的所有测试文件,以便尽可能多地包含你的核心代码。下面是一个如何编写单元测试的示例。这里还有一个 SciTime 的测试文件。

    一旦就位,你就可以通过在项目库的根目录运行 python -m pytest 在本地进行测试。

    创建测试后,你还应该能估算覆盖率。这一点很重要,因为你希望尽可能多地测试项目中的代码量(以减少意外的 bug)。

    很多框架也可以用于计算覆盖率,对于 SciTime,我们使用了 codecov。你可以通过创建.codecov.yml 文件来决定允许的最小覆盖率阈值,还可以通过创建.coveragerc 文件来决定要在覆盖率分析中包含哪些文件。

    comment: false

    coverage:
      status:
        project:
          default:
            target: auto
            threshold: 10%
        patch:
          default:
            target: auto
            threshold: 10%

    .codecov.yml 文件示例

    [run]
    branch = True
    source = scitime
    include = */scitime/*
    omit =
        */_data.py
        */
    setup.py

    .coveragerc 文件示例

    第 4 步:标准化语法和代码风格

    你还需要确保你的代码遵循 PEP8 准则(即具有标准样式并且语法正确)。同样,有很多工具可以帮助你解决。这里我们用了 flake8。

    第 5 步:创建一个合理的文档

    现在你的项目已经测试过了,结构也很好了,是时候添加一个合理的文档。首先是要有一个好的 readme 文件,它会在你的 Github 项目库的根目录上显示。完成后,加上以下几点会更好:

    • Pull 请求和 issue 模板:当创建新的 Pull 请求或 issue 时,这些文件可以根据你的需求给你的描述提供模板。

    •       Pull 请求创建步骤:https://help.github.com/en/articles/creating-a-pull-request-template-for-your-repository

    •       issue 创建步骤:https://help.github.com/en/articles/manually-creating-a-single-issue-template-for-your-repository

    •        Pull 请求模板:https://github.com/nathan-toubiana/scitime/blob/master/.github/PULL_REQUEST_TEMPLATE.md

    •        issue 模板:https://github.com/nathan-toubiana/scitime/tree/master/.github/ISSUE_TEMPLATE

    • 贡献指南(contribution guide)。应该在贡献指南中简单地说明你希望外部用户如何协助你改进这个包。Scitime 的贡献指南参见:https://github.com/nathan-toubiana/scitime/blob/master/.github/CONTRIBUTING.md。

    • 准则,Scitime 的准则参见:https://github.com/nathan-toubiana/scitime/blob/master/.github/CODE_OF_CONDUCT.md

    • 标签和说明(见下面的截图)

    • readme 文件中的标签(推荐一篇如何使用标签的好文章:https://medium.freecodecamp.org/how-to-use-badges-to-stop-feeling-like-a-noob-d4e6600d37d2)。

    由于 readme 文件应该相当综合,因此通常会有一个更详细的文档。你可以用 sphinx 来完成,然后在 readthedocs 上管理文档。与文档相关的文件通常放在 docs/文件夹中。sphinx 和 readthedocs 相关教程:https://docs.readthedocs.io/en/stable/intro/getting-started-with-sphinx.html。

    dda00341f953570075204855db767b3e.png

    包含标签和说明的项目库示例

    第 6 步:创建持续集成

    此时,你的项目离发布就绪不远了。但是,在每次提交之后,必须更新文档、运行测试以及检查样式和覆盖率似乎有点难以应付。幸运的是,持续集成(CI)可以帮助你完成。你可以在每次提交之后使用 GitHub 的 webhook 来自动执行所有的这些操作。以下是我们在 SciTime 中使用的一套 CI 工具:

    • 对于运行测试,我们使用了 travis ci 和 appveyor(用于 Windows 平台上的测试)。对于 Travis CI,除了在项目库上设置 webhook 之外,你还必须创建一个.travis.yml 文件,在该文件中,你不仅可以运行测试,还可以上传更新的覆盖率输出以及检查样式和格式。通过创建 appveyor.yml 文件,appveyor 也可以这样做。

    •  codecov 和 readthdocs 也有专用的 webhook

    language: python
    python:
      - "3.6"
    # command to install dependencies
    install:
      - pip install -r requirements.txt
      - pip install flake8
      - pip install pytest-cov
      - pip install codecov
    # command to run tests
    script:
      - python -m pytest --cov=scitime
      - ./build_tools/flake_diff.sh
    after_success:
      - codecov

    .travis.yml 文件的示例:请注意,每次提交,测试都需要与检查测试覆盖率一起进行。但还有一个 flake8 检查(逻辑则在 flake_diff.sh 文件中定义:https://github.com/nathan-toubiana/scitime/blob/master/build_tools/flake_diff.sh)

    environment:

      matrix:

        - PYTHON: "C:\\Python36-x64"

    install:
      # We need wheel installed to build wheels
      - "%PYTHON%\\python.exe -m pip install -r requirements.txt"
      - "%PYTHON%\\python.exe -m pip install pytest==3.2.1"


    build: off

    test_script:

      - "%PYTHON%\\python.exe -m pytest"

    appveyor.yml 文件示例:这里我们只运行测试

    这将使更新项目库的整个过程更加容易。

    902211ae51497053330dc115c8de6120.png

    集成 webhook 的提交历史记录示例

    第 7 步:创建你的第一个 release 和 publication

    此时,你即将发布的包应与以下类似:

    your_package/
       __init__.py
       your_module.py
    docs/
    tests/
    setup.py
    travis.yml
    appveyor.yml
    .coveragerc
    .codecov.yml
    README.md
    LICENSE
    .github/
       CODE_OF_CONDUCT.md
       CONTRIBUTING.md
       PULL_REQUEST_TEMPLATE.md
       ISSUE_TEMPLATE/

    现在可以发布了!首先要做的是在 GitHub 上创建你的第一个 release——这是为了在给定的时间点跟踪项目的状态,每次版本更改时都需要创建新的 release。创建步骤:https://help.github.com/en/articles/creating-releases。

    完成后,唯一要做的就是发布包。发布 python 包最常见的平台是 PyPI 和 Conda。以下我们将描述如何用两者发布:

    • 对于 PyPI,首先需要创建一个帐户,然后用 twine 执行一些步骤:https://realpython.com/pypi-publish-python-package/。这应该相当简单,而且 Pypi 还提供了一个可以在实际部署之前使用的测试环境。PyPI 总体上包括创建源代码(python setup.py sdist)并使用 twine(twine upload dist/*)来上传。完成后,应该有一个与你的包对应的 PyPI 页面,并且任何人都应该能够通过运行 pip 命令来安装你的包。

    •  对于 Conda,我们推荐通过 conda forge 来发布你的包,conda forge 是一个社区,帮助你通过 conda 渠道发布和维护包。你可以按照以下步骤将包添加到社区:https://conda-forge.org/#add_recipe,然后你会被添加到 conda forge Github 组织中,并能够非常轻松地维护你的包,然后任何人都可以通过运行 conda 命令来安装你的包。

    完成!

    现在,你的包应该已经发出去,并且任何人都可以使用了!虽然大部分工作都完成了,但是你仍然需要维护你的项目,你需要进行一些更新:这大体上意味着每次进行重大更改时都要更改版本,创建新的 release,并再次执行第 7 步。

    原文链接:https://medium.freecodecamp.org/from-a-python-project-to-an-open-source-package-an-a-to-z-guide-c34cb7139a22

    有关 Scitime 的详细信息参见:

    https://medium.com/m/global-identity?redirectUrl=https%3A%2F%2Fmedium.freecodecamp.org%2Ftwo-hours-later-and-still-running-how-to-keep-your-sklearn-fit-under-control-cc603dc1283b%3Fsource%3Dfriends_link%26sk%3D98e79add47516c38eeec59cf755df938)

    05c23355ce68627b2f777e57eef791be.png

    展开全文
  • 我想找到一种方法来安装我自己的python包,它依赖于其他定制的python包。在对于所有,最小结构为:myOwnPackage/myOwnPackage/__init__.pysetup.py现在,我创建了一个依赖于其他定制。其结构是:^{pr2}$我的...
  • GitHub宣布了Python安全警告,使Python用户可以访问依赖图,并在他们的库所依赖存在安全漏洞时收到警告。安全警告首次发布是在2017年10月,为了跟踪Ruby和JavaScript程序中的安全漏洞。据GitHub介绍,从那时起...
  • GitHub宣布了Python安全警告,使Python用户可以访问依赖图,并在他们的库所依赖存在安全漏洞时收到警告。安全警告首次发布是在2017年10月,为了跟踪Ruby和JavaScript程序中的安全漏洞。据GitHub介绍,从那时起...
  • poetry是一个Python虚拟环境和依赖管理的工具,之前用pipenv,最近学习httprunner时,接触了poetry。poetry和pipenv类似,另外还提供了打包和发布的功能。官方文档:python-poetry.org/docs/python项目部署:poetry...
  • 主流的编程语言都有非常强大的管理工具和便捷的库下载方式,Python 就有 pip 工具,一行命令就可以下载所需要的依赖库。pip install requests俗话说得好:轮子用的好,头发不会少。但是当我们开发到一定的阶段,...
  • {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台;社区覆盖了云计算、大数据、人工智能、...
  • 客户环境不能上网,开始想把所有依赖包下载下来,进入客户环境进行安装。但为了避免出差,部署工作交给其他同事了,我想还是需要更简单的方式。实验了一下virtualenv是可以的1. 创建一个新的环境(改为virtualenv --...
  • python中调用dll,并将dll以及python合并打包成一个exe文件的方法相信很多学习使用python的朋友都想过将python程序打包成一个EXE文件,这样避免了程序发布时还要安装python运行环境的问题。有很多程序可以帮助我们...
  • 参考文档Python 快速打包发布软件PyPi上包含setup.py的非Python文件五步法更新pypi发布1. 安装打包依赖工具pip install setuptools2. 安装上传工具pip install twine3. 注册PYPI官网个人用户4. 在和项目同级目录...
  • Python 打包发布

    2020-03-20 10:25:53
    打包是将制作好的 python程序转换成不依赖 python开发环境的 window 程序。 2 打包步骤 1.确认 python解释器是否安装 2.确认 pip 是否是最新版本 3.确认是否安装 pywin32 pip install pywin32 4.解压 ...
  • 我的任务是包装和运输商业应用程序,其中包括:python库(由我们开发)一些依赖于上面库的python程序不是我们开发的附加库,而是我们库的附属库。完整的python安装(python 2.6)其他语言的附加内容、libs和程序。这里...
  • 本文作者写了一份在 GitHub 上发布 python 的简单分步指南。选自 medium,作者:Gabriel Lerner、Nathan Toubiana,机器之心编译,参与:陈韵莹、张倩。作者以 SciTime 项目(一个对算法训练时间进行估计的)的...
  • Python程序打包发布

    2017-10-11 09:54:00
    先在开发机生成依赖文件,然后在生产机根据依赖文件安装包。 1. 开发机:生成依赖文件(requirements.txt) 方式1 #在项目目录内执行 pip freeze > requirements.txt 方式2(推荐) pipreqs --force --enco...
  • 这些是zip格式发布,但是后缀一般都是.eggsetuptool能解决python包依赖关系setuptool安装的默认安装到/usr/local/lib/pythonX.X/site-packages/目录下下载默认到http://pypi.python.org/pypi下载pypi为Py...
  • Python程序发布 Python程序发布时,通常包括以下三种形式: py源码:即源程序代码,使用时需要Python执行环境(包含对应的依赖库) pyc形式:由py文件编译生成,源码私密性提升、运行速度提升 可执行文件:可直接...
  • 在PyP发布自己创建的Python程序 主要解决打包额外依赖文件路径、PyPI重复项目名称说明等问题
  • Python程序打包.doc

    2020-02-03 22:08:59
    Python程序打包 Python程序打包工具 Python是一个脚本语言被解释器解释执行它的发布方式 .py文件对于开源项目或者源码没那么重要的直接提供源码需要使 用者自行安装Python并且安装依赖的各种库Python官方的各种...
  • 使用Python编程的都知道,Python安装非常的方便,一般都是可以pip来安装搞定:sudo pip install 最近因为项目上的需要,发布了一个自己的pypi Python包,这里我大致分享如何发布自己的Pypi一般过程。...
  • GitHub宣布了Python安全警告,使Python用户可以访问依赖图,并在他们的库所依赖存在安全漏洞时收到警告。安全警告首次发布是在2017年10月,为了跟踪Ruby和JavaS...
  • 原标题:开发与发布Python包】的详细步骤+全程视频 如何开发Python?本文将介绍一种很好的且很简单的方法。1设定一个名称Python包或模块的名称通常需要遵循以下条件:*所有字母小写*在pypi上没有同名的(即使...
  • 打包和发布两个常用的发布工具:zipapp和PyInstallerzipapp模块可用于生成可执行的Python档案,这个档案会包含目录下所有的Python程序。如果使用pip工具先将Python程序所依赖的模块下载到目标目录下,那么就可以...
  • Python 快速打包发布软件PyPi上 包含setup.py的非Python文件 五步法更新pypi发布 1. 安装打包依赖工具 pip install setuptools 2. 安装上传工具 pip install twine 3. 注册PYPI官网个人用户 4. 在和项目...
  • 摘要: 开发与发布Python包】的详细步骤 1.设定一个名称 Python包或模块的名称通常需要遵循以下条件: 所有字母小写 在pypi上没有同名的(即使您不想公开提供您的,您可能希望稍后将其私下指定为依赖项)...
  • 这些是zip格式发布,但是后缀一般都是.eggsetuptool能解决python包依赖关系setuptool安装的默认安装到/usr/local/lib/pythonX.X/site-packages/目录下下载默认到http://pypi.python.org/pypi下载pypi为Py...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 571
精华内容 228
关键字:

发布python依赖包

python 订阅