分类: 技术宅

  • 如何在pypiserver中启用密钥保护保护你的Python包仓库

    作为一名专业的Python程序员,你可能经常需要管理自己的Python包仓库。而pypiserver就是一个简单易用的工具,可以让你快速搭建自己的Python包仓库。但是,为了保护你的Python包仓库的安全,你可能需要在pypiserver中启用密钥保护。本文将为你介绍如何在pypiserver中启用密钥保护。

    一、密码文件

    pypiserver默认不支持密钥,但是可以通过设置密码文件来限制访问pypiserver。在pypiserver的根目录下创建一个名为.htaccess的文件,并在其中添加以下内容:

    username:password

    其中,username和password分别是你要设置的用户名和密码。请注意,密码需要使用htpasswd工具生成,否则会造成安全风险。htpasswd工具可以通过以下命令安装:

    $ sudo apt-get install apache2-utils

    使用htpasswd生成密码:

    $ htpasswd -c .htpasswd username

    输入密码后,将在当前目录下生成一个名为.htpasswd的文件,其中包含加密后的密码。你可以使用以下命令验证密码是否设置成功:

    $ htpasswd -v .htpasswd username

    二、HTTPS

    HTTPS可以通过在pypiserver的配置文件中设置来启用。在pypiserver的根目录下创建一个名为config.py的文件,并在其中添加以下内容:

    [server:main]
    use = egg:gunicorn
    host = 0.0.0.0
    port = 80
    certfile = /path/to/cert.pem
    keyfile = /path/to/key.pem

    其中,certfile和keyfile分别是SSL证书和密钥文件的路径。你可以使用Let’s Encrypt等工具来生成证书和密钥文件。

    请注意,启用HTTPS会增加服务器的安全性,但也会增加服务器的负担。如果你的服务器配置较低,可能会影响pypiserver的性能。

    总结:

    本文介绍了如何在pypiserver中启用密钥保护,包括密码文件和HTTPS加密通信。通过设置密码文件或启用HTTPS,可以提高你的Python包仓库的安全性,保护你的Python包不受非法访问。

  • 如何使用 pip 配置文件配置 PyPI 私有服务器

    在 Python 开发过程中,我们经常需要使用 pip 命令来安装各种依赖包。默认情况下,pip 会从公共 PyPI 服务器中下载相应的文件。但是,有时候我们需要使用私有 PyPI 服务器来管理和分发私有的 Python 包和依赖。这时候,我们可以使用 pip 配置文件来配置私有服务器的 URL。

    配置私有 PyPI 服务器的 URL

    使用 pip 配置文件来配置私有 PyPI 服务器的 URL,可以让我们在使用 pip 安装包和依赖时,自动判断要从哪个服务器下载相应的文件。下面是配置文件的步骤:

    创建 ~/.pip 目录:

    mkdir -p ~/.pip

    创建 pip.conf 文件,并编辑文件:

    touch ~/.pip/pip.conf nano ~/.pip/pip.conf

    pip.conf 文件中添加以下内容:

    [global]
    index-url = http://localhost:8080/simple/ 
    #指定可信任的主机名,用于避免 SSL 证书验证失败的问题
    trusted-host = localhost

    这里的 index-url 参数指定了私有 PyPI 服务器的 URL,可以根据实际情况进行修改。

    配置完成后,我们就可以在使用 pip 安装包和依赖时,从私有 PyPI 服务器中下载相应的文件。如果需要从公共 PyPI 服务器中下载,可以在 pip 命令中使用 -i--index-url 参数指定相应的 URL。

    其他配置选项

    除了配置私有 PyPI 服务器的 URL,我们还可以在 pip 配置文件中指定认证信息、缓存设置等。以下是一些常用的配置选项:

    • index-url:指定 PyPI 服务器的 URL。
    • trusted-host:指定可信任的主机名,用于避免 SSL 证书验证失败的问题。
    • proxy:指定 HTTP/HTTPS 代理服务器的 URL。
    • timeout:指定连接超时的时间,单位为秒。
    • no-cache-dir:禁用缓存,每次都从服务器下载最新的包和依赖。

    可以在 pip 官方文档中查看完整的配置选项。

  • 为什么需要 PyPI 私有服务器及其优点和限制

    PyPI是Python Package Index的缩写,它是一个公共的包管理器,包含了大量的Python库和依赖。然而,在某些情况下,开发团队可能需要使用私有的包管理器。这时候,就需要使用PyPI私有服务器。

    PyPI 私有服务器的作用是在企业内部建立一个私有的Python包仓库,供内部开发人员使用。通过PyPI私有服务器,开发团队可以方便地维护和管理项目中的包和依赖。此外,PyPI私有服务器还可以提高安全性,保护企业的代码和知识产权,防止恶意攻击和泄漏。

    PyPI 私有服务器的优点包括:

    1. 提高开发效率:PyPI私有服务器可以缩短项目的开发周期,提高开发效率,因为开发人员可以快速地访问内部仓库中的包和依赖,避免了网络延迟和其他不必要的等待。
    2. 提高安全性:PyPI私有服务器可以保护企业的代码和知识产权,防止恶意攻击和泄漏。企业可以通过PyPI私有服务器来管理和审核所使用的包和依赖,确保其安全性和可靠性。
    3. 提高稳定性:PyPI私有服务器可以帮助企业管理和维护内部使用的包和依赖。企业可以根据自己的需求进行包和依赖的版本控制和更新,从而提高项目的稳定性和可靠性。

    然而,PyPI私有服务器也有一些限制,包括:

    1. 需要专业的维护人员:PyPI私有服务器需要专业的维护人员来管理和维护。如果没有专业人员来维护,可能会导致一些安全问题和性能问题。
    2. 需要投入大量的时间和资源:建立和维护PyPI私有服务器需要大量的时间和资源。企业需要投入足够的资源来建立和维护服务器,从而确保其可靠性和稳定性。

    常见的 PyPI 私有服务器解决方案包括:

    • PyPI Server:PyPI Server 是一个开源的 PyPI 私有服务器解决方案,支持包和依赖的缓存和发布。它的设计简单,易于安装和使用。
    • devpi:devpi 是一个免费、开源的 PyPI 私有服务器解决方案,支持包和依赖的缓存、代理和发布。它提供了一些额外的功能,例如权限控制和多版本支持等。
    • Artifactory:Artifactory 是一款商业的 PyPI 私有服务器解决方案,支持 Python 包和依赖的缓存、代理、发布和管理。它还提供了一些高级功能,例如质量控制、版本控制和镜像等。

    这些解决方案都有其优点和限制,企业或组织可以根据自己的需求和预算选择合适的解决方案。

    结论:

    在 Python 开发过程中,PyPI 私有服务器是一个重要的工具,可以帮助企业或组织更好地管理自己的 Python 项目。通过使用 PyPI 私有服务器,企业或组织可以实现安全、私密、稳定和定制化的 Python 包和依赖项的管理。在选择 PyPI 私有服务器解决方案时,企业或组织应该根据自己的需求和预算选择合适的解决方案。

  • Ubuntu虚拟服务器无法联网的问题处理

    这次的断网问题可能比较特殊,记录一下对应的处理方案。

    服务器Ubuntu 18.04安装Python 3的时候,发现有多个版本的Python被安装了,这时候为了做到具体的控制,所以将Python全删除了一遍,也好像因此造成了系统网络的问题。

    重启后的第一结果是ssh连接超时,由于服务器使用了阿里云ECS,可以通过“控制台”远程连接服务器,这个连接可以理解为本地操作。

    连上之后,有一些坑,还卸载了openssh-server,在重新安装openssh-server的时候,发现一直无法连上软件服务器,尝试用ifconfig检查联网,才发现网卡消失,没有任何的连接。

    检查/etc/network/interfaces,发现配置都没有问题,通过ifconfig -a,能找到网卡eth0,这个时候使用dhclient eth0,来获取ip地址,解决联网问题。

    但是重启服务器后,发现又无法联网,服务器不可能每次重启后都要手动的获取一下IP,这个问题需要解决一下,之前尝试通过ifup eth0启用网卡的时候发现ifup没有安装,最后就通过sudo apt-get install ifupdown解决了这个问题,蛮神奇的,大概是什么依赖包因为安装了这个之后也一起安装了吧。

    所以本文就对这次断网处理做个记录。

  • Ubuntu下MongoDB版本的升级

    使用MongoDB好几年,服务器版本自最后一次升级一直停留在3.4版本。MongoDB版本已经出了3.6和4.0两个版本。这次服务器版本升级到Ubuntu 18.04,顺便就把MongDB也升级一下。

    MongoDB从3.4到3.6到4.0的升级,是一个逐步完成的过程,需要每个版本的服务器程序运行做调整。下面给出的是一个逐步升级的方案,已经对应的阿里云源,方便国内使用

    (更多…)
  • 服务器维护

    本次服务器维护,将原来的一堆杂乱的资料重新整理了。但是出了些差错,之前的博客图片在备份的时候没有保存成功,好在数据库全保存了,不然文字图片都没了那是灾难。

    本次维护会影响到之前推出的一些关键词工具的使用,会尽快恢复使用的,请随时关注博客的更新。

  • pymongo中find_one和find的效率

    在Mongodb中,如果想检查一个文档是否存在,最高效的方法应该是使用find()+count(),而不是使用find_one()。

    一般来说,我们第一感觉会认为find_one()最高效,但是find_one()每次查找会同时读取文档,这相比find()返回一个cursor,会慢不少。

    David Mytton,在《Checking if a document exists – MongoDB slow findOne vs find》 (2013),指出了这个区别。

    在我目前使用的pymongo 3.7.2中,无法像其文中所述,使用limit()判断返回的cursor是否存在,而需要count()判断返回的cursor是否包含文档。

    因此,使用

    db.collection.find({"username":"abc"}).count()
    db.collection.find({"username":{"$in":usernames}).count() # 如果usernames是一个列表

    来替代:

    db.collection.find_one({_id: "myId"}, {_id: 1})

     

  • CNN文本分类数据不平衡的处理

    用CNN做文本分类有一段时间了,关于训练数据不平衡的问题,我一直使用一个简单的方法,复制样本数据少的类别,在训练的时候,每个mini-batch都能相对均匀的抓取每个类别的信息。

    今天一个偶然,去查了查CNN数据不均衡的问题,发现网上资料不少,主要围绕过采样的方法,看了下定义,原来就是我的这个操作方式,这种方式不适合在SVM里面使用,因为数据表现的信息恒定不变,可是为啥在CNN里面效果好呢?复制样本并没有添加任何的信息。只是为了让mini-batch更均衡的使用每个类别数据。

    跟着疑问,追逐mini-batch的痕迹,在梯度下降的时候,由于计算量和机器的限制,无法一次性读入所有数据,而1个样本1个样本的处理,根本无法收敛,采用mini-batch,可以找到合适的下降步长和方向,快速收敛。同时,我们在使用mini-batch的时候,是用的sample batch,每一个batch,随机从总训练样本中抽取,这样每一个batch在梯度下降中的表现就不一样了。说到这,应该能联系上过采样在CNN中的好处了,一方面较为均匀的分配给每一个batch每一类别的信息,另一方面,增加了mini-batch的多样性,梯度下降能更好的找到最优或局部最优解。

    当然,最好的方式还是增加信息量,即样本多样性,让模型的准确率更高,这个就是数据量大的说法了。

    下次有机会做个对比实验。

     

     

  • 关键词提取工具

    发布一个关键词提取工具的在线版本,希望能给有需要的朋友提供便利,可以生成词云,也有详细的关键词和权重,这个工具的另外一个特性是提取的词会将高频的词组也提出,也因此存在一些非词组的词被自动提出),好处是通过关键词(或词组)能更清晰的看到文本的特点。

     

    由于服务器性能有限,提交文本的长度最大为一万个字,每天工具使用次数上限为一万词,不过顶不住大家使用的压力的话,会下调,可以看通知。

    传送门:关键词提取

    有什么问题可以留言!

  • Nodemcu、无线射频和Wifi实现家庭灯光控制

    之前参与智能音箱的项目,做语义理解,但硬件方面,实在是小白,这段时间腾出些时间,折腾下硬件,把家中的灯光整体改造一下。这篇文章从设计、硬件、软件、云服务、手机应用5个方面记录了这次改造中所获取的信息以及相关的程序代码。最终构建了一个通过手机控制和传统控制兼容的智能灯光。

    项目地址
    https://github.com/Ushiao/smartlife

    (更多…)