[心得]python pip私人庫安裝部署經驗總結

tangchen2016發表於2016-11-05

背景

pip打包:

setuptools

pip支援從wheel安裝,解除安裝,依賴覆蓋,列出已裝的包,以及pep438過渡釋出

而easy_install則支援egg安裝,修改系統路徑,多版本安裝

egg 是一個包含所有包資料的檔案包。在理想情況中,egg 是一個使用 zip 壓縮的檔案,其中包括了所有需要的包檔案。但是在某些情況下,setuptools 會決定(或被開關告知)包不應該是 zip 壓縮的。與 Java的 JAR檔案 類似。

PyPA團隊 開發的Python打包生態環境工具鏈: pip, setuptools, virtualenv 和 wheel.

wheel是用於替換egg格式,通過擴充套件setuptools,增加 bdist_wheel 功能就可以打包wheel檔案。

pip可以直接安裝wheel格式軟體包,但無法安裝egg格式軟體包;如果需要安裝egg格式,只能使用easy_install.

乾貨

1. yum install -y python-tools
2. install pip

$ rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ yum install -y python-pip
ref:http://sharadchhetri.com/2014/05/30/install-pip-centos-rhel-ubuntu-debian/

3. easy_install是由PEAK(Python Enterprise Application Kit)開發的setuptools包裡帶的一個命令,它用來安裝egg包。egg包是目前最流行的python應用打包部署方式。
$ yum install -y python-setuptools

4. install supervisor
ref:http://supervisord.org/installing.html

5. pip install pypiserver
升級python
$ yum install -y centos-release-SCL
$ yum install -y python27
ref:https://github.com/h2oai/h2o-2/wiki/installing-python-2.7-on-centos-6.3.-follow-this-sequence-exactly-for-centos-machine-only

6.啟動服務:
target_dir=/data/jenkins-slave/workspace/pip_repository_deploy
${target_dir}/scripts/start_supervisor.sh
7.停止服務
target_dir=/data/jenkins-slave/workspace/pip_repository_deploy
${target_dir}/scripts/stop_supervisor.sh

upload them remotely with a python setup.py upload command. Currently only password-protected uploads are supported!

pip install passlib

可能會碰到找不到htpasswd程式,執行這個化解:
yum install -y httpd
安裝http服務

htpasswd -sc htpasswd.txt public
輸入金鑰: xxx

然後在工作機器的家目錄建立一個.pypirc
內容如下:

[distutils]
index-servers =
  privatepypi

[privatepypi]
repository:http://pypi.python.cm:3141
username:public
password:xxx

怎麼樣使得包裡面包含一個資料資料夾:
setup.py其實是python工具包distutils的配置檔案,setuptools就是基於distutils來做的。 在setup.py中通過setup函式來配置打包資訊。

from setuptools import setup, find_packages

setup(name='hello_pypi',
        version='1.0',
        py_modules=['hello_pypi'],
        url='http://pypi.python.cm/packages/hello_pypi-1.0.tar.gz',
        author='tangchen',
        author_email='tangchen2008@gmail.com',
        #packages=find_packages('utils'), #package to utils dir
        #package_dir={'':'utils'},
        include_package_data=True,
        )

有些 python application 會依賴一些非 *.py 資料檔案,比如 image, documentation 和 data tables 等,我們把這些檔案統稱為 data file,所以打包時需將這些檔案包含在內。現在往 packagedemo 新增 data 目錄和相關檔案,在MANIFEST.in中include進來。

關鍵在"include_package_data=True,"
並且打包目錄建立一個MANIFEST.in,內容如下
include data/*

然後執行:
python setup.py sdist
這樣打好的包裡面就包含相應的檔案了

refer:
https://yijingping.github.io/2013/07/25/setting-up-your-own-pypi-server.html
http://stackoverflow.com/questions/18828805/how-can-i-install-packages-hosted-in-a-private-pypi-using-setup-py
http://lingxiankong.github.io/blog/2013/12/23/python-setup/

相關文章