linux上部署python本地开发环境

将本地开发环境的依赖项目生成清单文件

1.在本地的开发环境中,env下执行:

1
pip3 freeze >requirements.txt

清单文件将会生成在当前项目目录下,内容如下所示

1
2
3
4
5
certifi==2018.4.16
chardet==3.0.4
idna==2.7
requests==2.19.1
urllib3==1.23

将生成后的文件上传到linux服务器

2.将Python项目上传到服务器

1
#略...

第三步:在linux服务器上为项目创建虚拟环境,并安装项目所需的依赖

1.切换到pip3所在的目录 /usr/local/python/bin,执行以下命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 安装虚拟环境
pip3 install virtualenv

# 创建虚拟环境 ENV
virtualenv ENV

# 切换到虚拟环境所在的目录
cd ENV

# 启用虚拟环境
source ./bin/activate
关闭虚拟环境:
deactivate

# 安装依赖清单里的库
pip3 install -r requirements.txt

# 列出当前虚拟环境所安装的依赖库
pip3 list

 使用pip3 install -r requirements.txt 报:

 解决办法:

我们都知道,想要进行pip升级,其实只要在命令行运行以下代码即可:

python -m pip install --upgrade pip

但是由于种种原因,该联网直接下载更新包的方法总是会被不知名的原因打断,并反复提示上图的错误。经过种种尝试和网络上资料搜寻,本人终于试出一种可行方法,其需要三个注意事项:

1.不要直接win+R然后cmd,而是要选择“开始”—“Windows系统”—“命令提示符”—右键“以管理员身份运行”!!!
2.不要用家用WiFi,开手机热点连接!!!
3.管理员身份运行命令提示符后,使用镜像下载升级!!!代码如下:

python -m pip install --upgrade pip -i https://pypi.douban.com/simple

问题一:安装时报错ModuleNotFoundError: No module named '_ctypes'的解决办法

1、执行如下命令:

yum install libffi-devel 

2、从"./configure ..."重新安装

问题二:pip3 install时报错“pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.”

先安装openssl-dev,然后重新编译安装,只是在编译的过程中加入 --enable-optimizations

ubuntu:

sudo apt-get install libffi-dev

或者

  1. sudo apt-get update
  2.  
  3. sudo apt-get upgrade
  4.  
  5. sudo apt-get dist-upgrade
  6.  
  7. sudo apt-get install build-essential python-dev python-setuptools python-pip python-smbus
  8.  
  9. sudo apt-get install build-essential libncursesw5-dev libgdbm-dev libc6-dev
  10.  
  11. sudo apt-get install zlib1g-dev libsqlite3-dev tk-dev
  12.  
  13. sudo apt-get install libssl-dev openssl
  14.  
  15. sudo apt-get install libffi-dev

centos7

yum install libffi-devel -y

第四步:添加自定义系统服务(很重要)

1
2
# 这样的命令在ssh终端退出后,python进程也会被杀掉
python xxx.py &

需要创建一个自定义的系统服务,来保证python程序能够在后台运行。

1.创建系统服务

1
vim /usr/lib/systemd/system/robot.service

内容如下:

1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=robot
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/python3/bin/ENV/bin/python /usr/local/python3/bin/ENV/p3.py &
PrivateTmp=true

[Install]
WantedBy=multi-user.target

ExecStart为服务启动时执行的命令,不能用相对路径, 一定要全路径。
这里也可以将命令写到任意的.sh文件中,这里写.sh文件的全路径也是可以的。

2.启用自定义系统服务

1
systemctl enable robot

3.启动服务

1
systemctl start robot

可以查看进程,确认一下服务是否启动

1
ps aux|grep robot

完毕!

原文地址:https://www.cnblogs.com/smilevv/p/14138124.html