前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >统计学习方法 Python 库

统计学习方法 Python 库

作者头像
iOSDevLog
发布2019-06-01 10:46:02
1K0
发布2019-06-01 10:46:02
举报
文章被收录于专栏:iOSDevLog

新建 GitHub 仓库

打开 https://github.com/new,新建一个公共仓库。

  • 仓库名为 slmethod, 统计学习方法(Statistical Learning Method)的简写
  • Public 公开仓库
  • 勾选 Initialize this repository with a README
  • .gitignore 选择 Python
  • 添加 MIT License

new

源码地址:https://github.com/iOSDevLog/slmethod

下载代码到本地,使用 ssh 协议。

代码语言:javascript
复制
git clone git@github.com:iOSDevLog/slmethod.git

使用 cz-cli 提交代码。

代码语言:javascript
复制
git cz

打包 Python 项目

新建虚拟环境

代码语言:javascript
复制
mkvirtualenv slm

创建以下文件结构:

代码语言:javascript
复制
slmethod
├── LICENSE
├── README.md
└── slm
    └── __init__.py

编辑 slm/__init__.py

代码语言:javascript
复制
name = "slm"

创建 setup.py

setup.pysetuptools 的构建脚本。它告诉 setuptools 你的包(例如名称和版本)以及要包含的代码文件。

打开 setup.py 并输入以下内容,更新软件包名称以包含您的用户名。

代码语言:javascript
复制
import setuptools

with open("README.md", "r") as fh:
    long_description = fh.read()

setuptools.setup(
    name="slm",
    version="0.0.1",
    author="iOSDevLog",
    author_email="iosdevlog@iosdevlog.com",
    description="Statistical Learning Method package",
    long_description=long_description,
    long_description_content_type="text/markdown",
    url="https://github.com/iOSDevLog/slmethod",
    packages=setuptools.find_packages(),
    classifiers=[
        "Programming Language :: Python :: 3",
        "Programming Language :: Python :: 3.5",
        "Programming Language :: Python :: 3.6",
        "Programming Language :: Python :: 3.7",
        "License :: OSI Approved :: MIT License",
        "Operating System :: Microsoft :: Windows",
        "Operating System :: POSIX",
        "Operating System :: Unix",
        "Operating System :: MacOS",
    ],
)

setup() 需要几个论点。此示例包使用相对最小的集:

  • name 是包的 分发名称。只要包含字母,数字 _ 和,就可以是任何名称 -。它也不能在 pypi.org 上使用。请务必使用您的用户名更新此内容, 因为这样可确保您不会尝试上传与上传程序包时已存在的程序包相同的程序包。
  • version 是包版本看 PEP 440 有关版本的更多详细信息。
  • authorauthor_email 用于识别包的作者。
  • description 是一个简短的,一句话的包的总结。
  • long_description 是包的详细说明。这显示在 Python Package Index 的包详细信息包中。在这种情况下,加载长描述 README.md 是一种常见模式。
  • long_description_content_type 告诉索引什么类型的标记用于长描述。这里是 Markdown 格式。
  • url 是项目主页的 URL。对于许多项目,这只是一个指向 GitHub,GitLab,Bitbucket 或类似代码托管服务的链接。
  • packages 是应包含在 分发包 中的所有 Python 导入包 的列表。我们可以使用 自动发现所有包和子包,而不是手动列出每个包。在这种情况下,包列表将是 slm 因为它是唯一存在的包。find_packages()
  • classifiers 给出了指数和 pip 你的包一些额外的元数据。在这种情况下,该软件包仅与 Python 3 兼容,根据 MIT 许可证进行许可,并且与操作系统无关。您应始终至少包含您的软件包所使用的 Python 版本,软件包可用的许可证以及您的软件包将使用的操作系统。有关分类器的完整列表,请参阅 https://pypi.org/classifiers/

除了这里提到的还有很多。有关详细信息,请参阅 打包和分发项目

生成分发档案

下一步是为 成分发包。这些是上传到包索引的档案,可以通过 pip 安装。

确保您拥有 setuptoolswheel 安装了最新版本:

代码语言:javascript
复制
python3 -m pip install --user --upgrade setuptools wheel # 不在虚拟环境时
python3 -m pip install --upgrade setuptools wheel # 在虚拟环境不需要 --user

小提示

如果您在安装它们时遇到问题,请参阅 安装包 教程。

现在从 setup.py 位于的同一目录运行此命令:

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

此命令应输出大量文本,一旦完成,应在 dist 目录中生成两个文件:

代码语言:javascript
复制
dist
├── slm-0.0.1-py3-none-any.whl
└── slm-0.0.1.tar.gz

注意

如果您遇到麻烦,请复制输出并提出有关 包装问题的问题,我们会尽力为您提供帮助!

tar.gz 文件是 源存档, 而该 .whl 文件是 构建的分发。较新的 pip 版本优先安装构建的发行版,但如果需要,将回退到源代码存档。您应该始终上传源存档并为项目兼容的平台提供构建的存档。在这种情况下,我们的示例包在任何平台上都与 Python 兼容,因此只需要一个构建的发行版。

上传分发档案

最后,是时候将您的包上传到 Python Package Index 了!

您需要做的第一件事是在 Test PyPI 上注册一个帐户。Test PyPI 是用于测试和实验的包索引的单独实例。这对于像我们不一定想要上传到真实索引的本教程这样的东西很棒。要注册帐户,请访问 https://test.pypi.org/account/register/ 并完成该页面上的步骤。在您上传任何套餐之前,您还需要验证您的电子邮件地址。有关 Test PyPI 的更多详细信息,请参阅 使用 TestPyPI

现在您已注册,您可以使用 twine 上传分发包。你需要安装 Twine:

代码语言:javascript
复制
python3 -m pip install --user --upgrade twine
python3 -m pip install --upgrade twine #  虚拟环境不用 --user

安装完成后,运行 Twine 以上传所有存档 dist

代码语言:javascript
复制
python3 -m twine upload --repository-url https://test.pypi.org/legacy/ dist/*

系统将提示您输入使用 Test PyPI 注册的用户名和密码。

代码语言:javascript
复制
python3 -m twine upload --repository-url https://test.pypi.org/legacy/ dist/*
Enter your username: iOSDevLog
Enter your password: 
Uploading distributions to https://test.pypi.org/legacy/
Uploading slm-0.0.1-py3-none-any.whl
100%|██████████████████████████████████████████████████████████████████████████████████| 5.95k/5.95k [00:00<00:00, 12.2kB/s]
NOTE: Try --verbose to see response content.
HTTPError: 403 Client Error: Invalid or non-existent authentication information. for url: https://test.pypi.org/legacy/

错误的用户验证信息,你需要创建一个用户验证文件 ~/.pypirc

代码语言:javascript
复制
[distutils]
index-servers=pypi

[pypi]
repository = https://upload.pypi.org/legacy/
username = 
password = 

使用 twine upload dist/* 上传。

代码语言:javascript
复制
twine upload dist/*
Uploading distributions to https://upload.pypi.org/legacy/
Uploading slm-0.0.1-py3-none-any.whl
100%|███████████████████████████████████████████████████████████████████████████████| 5.95k/5.95k [00:01<00:00, 3.11kB/s]
NOTE: Try --verbose to see response content.
HTTPError: 403 Client Error: The user 'iosdevlog' isn't allowed to upload to project 'slm'. See https://pypi.org/help/#project-name for more information. for url: https://upload.pypi.org/legacy/

可能有重名了,我改一下。

代码语言:javascript
复制
name="slm"

改为

代码语言:javascript
复制
name="slmethod",

再试一次。

代码语言:javascript
复制
python3 setup.py sdist bdist_wheel
twine upload dist/*

命令完成后,您应该看到与此类似的输出:

代码语言:javascript
复制
Uploading distributions to https://upload.pypi.org/legacy/
Uploading slmethod-0.0.1-py3-none-any.whl
100%|███████████████████████████████████████████████████████████████████████████████| 6.01k/6.01k [00:00<00:00, 8.88kB/s]
Uploading slmethod-0.0.1.tar.gz
100%|███████████████████████████████████████████████████████████████████████████████| 4.91k/4.91k [00:01<00:00, 4.19kB/s]

上传后,您的软件包应该可以在 TestPyPI 上查看,例如,https://pypi.org/project/slmethod/

pypi

安装新上传的软件包

代码语言:javascript
复制
pip install slmethod
Collecting slmethod
  Downloading https://files.pythonhosted.org/packages/14/ab/9cc45b2879bf1e37963c6d36007974b3f9519d6a83169fc4a94252ea9a7c/slmethod-0.0.1-py3-none-any.whl
Installing collected packages: slmethod
Successfully installed slmethod-0.0.1

或者

代码语言:javascript
复制
python3 -m pip install --index-url https://test.pypi.org/simple/ --no-deps slmethod
代码语言:javascript
复制
Collecting slmethod
  Downloading https://test-files.pythonhosted.org/packages/.../slmethod-0.0.1-py3-none-any.whl
Installing collected packages: slmethod
Successfully installed slmethod-0.0.1

确保在包名中指定您的用户名!

pip 应该从 Test PyPI 安装包,输出应该如下所示:

代码语言:javascript
复制
python3 -m pip install --index-url https://test.pypi.org/simple/ --no-deps slmethod

注意

此示例使用 --index-urlflag 指定 TestPyPI 而不是实时 PyPI。另外,它指定 --no-deps。由于 TestPyPI 与实时 PyPI 没有相同的包,因此尝试安装依赖项可能会失败或安装意外的事情。虽然我们的示例包没有任何依赖关系,但在使用 TestPyPI 时避免安装依赖项是一种很好的做法。

您可以通过导入模块并引用先前 name 放置的属性来测试它是否已正确安装 __init__.py

运行 Python 解释器(确保你仍然在你的 virtualenv 中):

代码语言:javascript
复制
python

然后导入模块并打印出 name 属性。这应该是一样的,不管你的名字你给您的 分发包setup.py(在这种情况下,slm),因为你的导入包slm

代码语言:javascript
复制
>>> import slmethod
>>> print(slmethod.name)
slmethod

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.05.31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 新建 GitHub 仓库
  • 打包 Python 项目
    • 新建虚拟环境
      • 创建以下文件结构:
        • 创建 setup.py
        • 生成分发档案
        • 上传分发档案
        • 安装新上传的软件包
        相关产品与服务
        代码托管
        CODING 代码托管(CODING Code Repositories,CODING-CR)是为开发者打造的云端便捷代码管理工具,旨在为更多的开发者带去便捷、高效的开发体验,全面支持 Git/SVN 代码托管,包括代码评审、分支管理、超大仓库等功能。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档