python项目打包虚拟环境

python项目打包时,需要将虚拟环境与python自身安装路径下的lib包整合在一起,将如下内容保存为packvenv.sh文件,修改PYTHON_PATH(python的安装路径)以及VENV_PATH(虚拟环境的全路径)为自己的目录,然后给文件添加执行权限:chmod +x packvenv.sh,./packvenv.sh执行即可

Linux:packvenv.sh

#!/bin/bash

PYTHON_PATH=/usr/local/python2.7
VENV_PATH=~/.virtualenvs/venv-linux6

VENV_NAME=`basename $VENV_PATH`

echo $VENV_NAME

mkdir $VENV_NAME
mkdir $VENV_NAME/bin

# copy python lib 
cp -r $PYTHON_PATH/lib $VENV_NAME/lib
rm -rf $VENV_NAME/lib/python2.7/site-packages

# copy venv python
cp $VENV_PATH/bin/python $VENV_NAME/bin/ || exit 1

# copy venv lib
packdir=$VENV_PATH/lib/python2.7
for e in `ls $packdir`
do
    files=$packdir/$e
    realfiles=`readlink $files`
    if [ $realfiles ]; then
        cp -r $realfiles $VENV_NAME/lib/python2.7/
    else
        cp -r $files $VENV_NAME/lib/python2.7/
    fi  
done

# remove .pyc .pyo and test files
remove_pyc_and_pyo_files() {
    for e in `ls $1`
    do  
        fullpath=$1/$e
        if [[ "${e:0-5}" == "-info" || "${e:0-4}" == ".pyc" || "${e:0-4}" == ".pyo" || "$e" == "test" ]]; then
            echo delete file:$fullpath
            rm -rf $fullpath
        elif [ -d $fullpath ]; then
            remove_pyc_and_pyo_files $fullpath
        fi  
    done
}

remove_pyc_and_pyo_files $VENV_NAME/lib/python2.7

rm -rf $VENV_NAME/lib/pkgconfig
cd $VENV_NAME/lib
ln -s python2.7 python

Windows:packvenv.bat

SET WD=%CD%
SET PACKAGEPATH=%WD%\win-build
SET "VIRTUALENV=venv"
SET "VIRTUALENVPATH=C:\Users\Administrator\Envs"
SET "PYTHON_HOME=C:\Python27"
SET "PYTHON_DLL=C:\Windows\SysWOW64\python27.dll"

:: get Python version for the runtime build ex. 2.7.1 will be 27
FOR /f "tokens=1 DELims=." %%G IN ('%PYTHON_HOME%/python.exe -c "import sys; print(sys.version.split(' ')[0])"') DO SET PYTHON_MAJOR=%%G
FOR /f "tokens=2 DELims=." %%G IN ('%PYTHON_HOME%/python.exe -c "import sys; print(sys.version.split(' ')[0])"') DO SET PYTHON_MINOR=%%G
SET "PYTHON_VERSION=%PYTHON_MAJOR%%PYTHON_MINOR%"


MKDIR "%PACKAGEPATH%\%VIRTUALENV%" > nul || EXIT /B 1
MKDIR "%PACKAGEPATH%\bin" > nul || EXIT /B 1

ECHO Copying python DLLs...
XCOPY /S /I /E /H /Y "%PYTHON_HOME%\DLLs" "%PACKAGEPATH%\%VIRTUALENV%\DLLs" > nul || EXIT /B 1

ECHO Copying python Lib...
XCOPY /S /I /E /H /Y "%PYTHON_HOME%\Lib" "%PACKAGEPATH%\%VIRTUALENV%\Lib" > nul || EXIT /B 1
RD /Q /S "%PACKAGEPATH%\%VIRTUALENV%\Lib\site-packages" 1> nul 2>&1 || RD /Q /S "%PACKAGEPATH%\%VIRTUALENV%\Lib\site-packages" 1> nul 2>&1

ECHO Copying virtual environment...
XCOPY /S /I /E /H /Y "%VIRTUALENVPATH%\%VIRTUALENV%\Lib" "%PACKAGEPATH%\%VIRTUALENV%\Lib" > nul || EXIT /B 1

IF %PYTHON_MAJOR% == 2 (
    :: 如果site-packages中有backports模块,则需要执行此语句,这是因为python3以前该模块少个__init__.py文件
    ECHO Fixing backports.csv for Python 2 by adding missing __init__.py...
    type nul >> "%PACKAGEPATH%\%VIRTUALENV%\Lib\site-packages\backports\__init__.py"
)

ECHO Cleaning up unnecessary *.pyc *.pyo and tests files...
FOR /R "%PACKAGEPATH%\%VIRTUALENV%" %%f in (*.pyc *.pyo) do DEL /q "%%f" >nul 2>&1
FOR /R "%PACKAGEPATH%\%VIRTUALENV%" %%f in (tests) do RD /S /Q "%%f" >nul 2>&1

ECHO Staging Python...
COPY %PYTHON_DLL% "%PACKAGEPATH%\bin" > nul || EXIT /B 1
COPY %PYTHON_HOME%\python.exe "%PACKAGEPATH%\bin" > nul || EXIT /B 1
COPY %PYTHON_HOME%\pythonw.exe "%PACKAGEPATH%\bin" > nul || EXIT /B 1

EXIT /B 0

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

password-u

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值