# 创建虚拟环境
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.使用 systemd 管理 pypiserver此部分隐藏
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已经运行了
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/pypi4.启动 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.whl2.创建模块存放路径
在D盘创建packages文件夹
3.安装所需库pip install htpasswd # 安装Apache pip install passlib4.生成帐号密码
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 # 安装指定版本或者多个版本



