一、Linux搭建

1.服务端的配置

# 创建虚拟环境
conda create -n pypiserver_env python==3.7.0
conda activate pypiserver_env
pip install pypiserver  # 安装pypiserver服务器
~$ sudo mkdir packages # 存放包的库,建议创建在根目录下,而且名字必须是packages,如果不是,开启服务器的时候会有错误提示

sudo chmod 777 packages # 修改权限

pip install htpasswd 
pip install passlib
~$ cd packages/
htpasswd -sc .htpasswd user # 创建存放密码的文件,user为自建的用户名,可以为别的,但是自己一定要记住,可能需要下载htpasswd以及passlib包,根据提示来下载


# pypi-server -p 8080 -P ~/.htpasswd ~/packages # 开启pypiserver服务器

# pypi-server -p 8080 -P auth/.htpasswd -a update,download,list --fallback-url https://pypi.doubanio.com/simple ./packages
    
# pypi-server -p 8080 -P ~/packages/.htpasswd -a update,download,list ./packages

# -p 是端口; -P 密码文件; -a 表示需要认证的操作,该示例中 上传、下载安装和查看包都需要认证; fallback-url 表示如果的你的 packages 中没有对应的包时,去哪个源获取这个包;./packages 表示包的位置

服务器开启后,登录谷歌浏览器,输入"localhost:8080"或者"http://127.0.0.1:8080"可以看到服务器开启成功.

2.客户端的配置

创建一个.pypirc的文件,此文件应该存放在根目录下

touch .pypirc # 此文件为一个隐藏文件,名字只能为这样
vim .pypirc # 编辑此文件中的内容

.pypirc文件中应该写入以下内容:

注意:repository网址最后 / 不要忘了>

[distutils]
index-servers = local # local为私有源服务器的名字,此处注释方便理解,文件中最好不要出现注释内容
 
[local]
repository:http://127.0.0.1:8080/ # 开启服务器的ip地址以及端口号
username:uesr # 服务器端设置的账户
password:user # 服务器设置的密码

此部分隐藏

3.后台启动

nohup pypi-server -p 8080 packages_dir &

pypi-server应该在后台运行,简单的话可用使用nohup命令,但一般都用supervisor来管理。

pip install supervisor

~/pypi$目录创建pypi-server.conf,内容如下:

[program:pypi-server] directory=/home/pypi/ command=/home/pypi/.venv/bin/pypi-server -p 8080 -P /home/pypi/.htpasswd /home/pypi/packages autostart=true autorestart=true redirect_stderr=true

其中-p选项指定侦听的端口,-P选项指定密码文件。

将该文件软链到supervisor的配置文件夹下:

cd /etc/supervisor/conf.d/ sudo ln -s /home/pypi/pypi-supervisor.conf pypi-supervisor.conf

重启supervisor

~$ sudo supervisorctl reload

查看pypi-server运行情况:

~$ sudo supervisorctl status pypi-server RUNNING pid 27289, uptime 16:41:19

可见pypi-server已经运行了

3.使用 systemd 管理 pypiserver

sudo vim /usr/lib/systemd/system/pypi.service

注意:必须为绝对路径

[Unit]
Description=pypi-server daemon
After=network.target

[Service]
ExecStart=/home/cwj0/anaconda3/envs/pypiserver_env/bin/pypi-server \
    -p 8080 \
    -P /home/cwj0/packages/.htpasswd -a update,download,list \
    -r /var/www/pypi \
    --log-file /var/log/pypi/pypi.log
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target
# 创建 pypi 及 log 路径

$ sudo mkdir -p /var/www/pypi
$ sudo mkdir -p /var/log/pypi

4.启动 pypiserver

sudo systemctl daemon-reload
sudo systemctl start pypi
sudo systemctl status pypi
● pypi.service - pypi-server daemon
     Loaded: loaded (/lib/systemd/system/pypi.service; disabled; vendor preset: enabled)
     Active: active (running) since Wed 2022-02-23 11:01:06 CST; 7s ago
   Main PID: 11363 (pypi-server)
      Tasks: 1 (limit: 13415)
     Memory: 16.1M
     CGroup: /system.slice/pypi.service
             └─11363 /home/cwj0/anaconda3/envs/pypiserver_env/bin/python /home/cwj0/anaconda3/envs/pypiserver>

2月 23 11:01:06 ubuntu systemd[1]: Started pypi-server daemon.

5.上传

# python setup.py sdist bdist_wheel upload -r local
# python setup.py sdist upload -r http://127.0.0.1:8080

pip install twine

twine upload --repository-url http://127.0.0.1:8080 packagename.whl
twine upload --repository-url http://127.0.0.1:8080 dist/*  # 上传多个包

6.下载安装

# 方法一
pip install --index-url http://127.0.0.1:8080/simple/ sasl==0.2.1  # 安装指定版本
# 方法二
pip install -i http://127.0.0.1:8080/ --trusted-host 127.0.0.1 packagename  # 可安装指定版本或多个包

二、Windows搭建

1.安装server

# pip install pypiserver
pip install pypiserver-1.4.2-py2.py3-none-any.whl

2.创建模块存放路径

在D盘创建packages文件夹

3.安装所需库

pip install htpasswd 
# 安装Apache
pip install passlib

4.生成帐号密码

htpasswd -sc D:\packages\.htpasswd user

回车后输入密码

5.启动

可使用NSSM自动启动

首先安装NSSM,下载https://nssm.cc/download

新建start_pypiserver.bat,填入:

pypi-server -p 8080 -P D:\packages\.htpasswd -a update,download,list D:\packages

在NSSM安装命令运行:nssm install pypiserver

在Application Path中填入start_pypiserver.bat的路径

Arguments根据上一步自动生成,点击Install service

右键我的电脑-> 管理 -> 服务和应用程序 -> 服务 ->找个刚刚输入的服务名称(这里是pypiserver)点击启动即可

配置系统环境变量,添加刚刚nssm.exe的文件目录

下面是nssm的常用命令

nssm install servername  # 创建servername服务
nssm start servername  # 启动服务
nssm stop servername  # 暂停服务
nssm restart servername  # 重新启动服务
nssm remove servername  # 删除创建的servername服务
# pypi-server -p 8080 -P ~/packages/.passwd.txt ~/packages
# pypi-server D:\packages

pypi-server -p 8080 -P D:\packages\.htpasswd -a update,download,list D:\packages

# 后台启动
start /b pypi-server -p 8080 -P D:\packages\.htpasswd -a update,download,list D:\packages


# -p 是端口; -P 密码文件; -a 表示需要认证的操作,该示例中 上传、下载安装和查看包都需要认证; fallback-url 表示如果的你的 packages 中没有对应的包时,去哪个源获取这个包;./packages 表示包的位置

6.客户端配置

创建.pypirc文件的时候,存放目录在C盘用户目录下,windows目录下创建.pypirc文件使用notepad++编辑

.pypirc文件中应该写入以下内容:

[distutils]
index-servers =
  local     # local为私有源服务器的名字,此处注释方便理解,文件中最好不要出现注释内容


[local]
repository:http://127.0.0.1:8080/   # 开启服务器的ip地址以及端口号
username:user   # 服务器端设置的账户
password:user   # 服务器设置的密码

7.上传

# python setup.py sdist bdist_wheel upload -r local
# python setup.py sdist upload -r http://127.0.0.1:8080

pip install twine

# 方法一
twine upload -r local packagename  # 后面为whl文件,可上传多个,以空格分隔
# 方法二
twine upload --repository-url http://127.0.0.1:8080 packagename.whl  # 可上传多个包,以空格分隔
# 方法三
# twine upload -r local dist/*  # 后面为whl文件
twine upload -r http://127.0.0.1:8080 dist/*  # 后面为whl文件,上传多个文件

8.下载安装

# 方法一
pip install -i http://127.0.0.1:8080/ --trusted-host 127.0.0.1 packagename  # 可安装多个,以空格分隔
# 方法二
pip install --index-url http://127.0.0.1:8080/ sasl==0.2.1  # 安装指定版本或者多个版本