前言:
我目前使用的服务器为centos7.x 系统自带的python的版本为2.7.x,但是目前无论是学习还是使用python,python3都是首选,那么问题来了。---如何安装python3环境,又如何给python3安装对应的pip3呢? 更关键的是我们原来的系统中还有一些自带的工具需要用到python2.7版本,所以要求的是python3 and python2 共存,pip2 and pip3共存。下面文章就是我的亲自实践。(给 python3 安装 pip3)
写这篇的目的就是为了帮助也遇到同样问题的同志(目前网上的资料不好找,大都没有经过实践,下面是我的经历,百分百能够成功!! go !!go!!)
一。先安装python3
安装python3.x 这里不多赘述,so easzy!!
1. 先到官方网站下载python3的安装包
https://www.python.org/downloads/source/ ---我下载的是Python-3.7.1.tgz
2、解压:
tar -zxvf Python-3.7.1.tgz
3.编译安装
!!!!注意 注意 ⚠️ 在编译之前需要安装一些必须的依赖,否则当报错的时候还得重新编译 ---(我就是吃了这个亏,千万要注意奥。。。)
安装必要依赖(至少需要如下三个,我个人就遇到如下三个)
yum install openssl-devel -yyum install zlib-devel -yyum install libffi-devel -y
好了现在可以安心的编译咯:
cd Python-3.7.1
./configure --prefix=/opt/Python371 #安装目录可以自己定义无所谓。
make
make install
编译完成后会在如 /opt/下生成Python371的文件夹 ,没错这就是编译完成的python --为了方便操作可以自己定义一个软连接如下:
ln -s /opt/Python371/bin/python3 /usr/bin/python3
这样就可以直接使用python3了,同时pip3也安装好了
现在就可以用pip3给python3安装各种包了
如果使用老版本的Python,要安装pip3就参考这篇文章:
http://www.cnblogs.com/wenchengxiaopenyou/p/5709218.html
代码的版本升级:
可以利用Python内置工具2to3.py,帮你自动将Python2的代码转换为Python3的代码的。这个脚本的位置位在Python安装的根目录Python27ToolsScripts2to3.py。
比如我手上有个Python 2.x的python脚本:D:tmptransform.py
可以通过打开命令提示符,定位至该要转换的脚本目录下,然后运行 python 2to3.py -w transform.py
如果上述不加-w参数,则默认只是把转换过程所对应的diff内容打印输出到当前窗口而已。加了-w,就是把改动内容,写回到原先的文件了。
下载软件:
wget https://www.sqlite.org/2019/sqlite-autoconf-3270100.tar.gz
解压
tar zxvf sqlite-autoconf-3270100.tar.gz
cd sqlite-autoconf-3270100/
编译及安装
./configure -prefix=/opt/sqlite3
make && make install
成功安装,最后输出如下信息:
----------------------------------------------------------------------
Libraries have been installed in:/opt/sqlite3/libIf you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the '-LLIBDIR'
flag during linking and do at least one of the following:- add LIBDIR to the 'LD_LIBRARY_PATH' environment variableduring execution- add LIBDIR to the 'LD_RUN_PATH' environment variableduring linking- use the '-Wl,-rpath -Wl,LIBDIR' linker flag- have your system administrator add LIBDIR to '/etc/ld.so.conf'See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
信息显示sqlite3的安装路径是:/opt/sqlite3/lib
特别注意建议添加sqlite3环境变量:
add LIBDIR to the 'LD_LIBRARY_PATH' environment variable during execution
添加环境变量:export LD_LIBRARY_PATH=/opt/sqlite3
验证是否能正常运行:
/opt/sqlite3/bin/sqlite3
执行上面命令,正常运行输出下面信息:
SQLite version 3.27.1 2019-02-08 13:17:39
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> 输入命令.quit退出sqlite3
sqlite> .quit
接下重新编译安装Python3
首先修改python3源码的setup.py文件的下面部分,找到sqlite_inc_paths进行修改,如下所示:
sqlite_inc_paths = [ '/usr/include','/opt/sqlite3/include', # 添加这一行'/usr/include/sqlite','/usr/include/sqlite3','/usr/local/include','/usr/local/include/sqlite','/usr/local/include/sqlite3',]
接下进入源目录重新编译python:
make
make install
验证安装是否成功:
python3
import sqlite3
未报错则表示安装成功
1 下载MongoDB源码包:
wget https://www.mongodb.com/download-center/community2 解压源码包:
tar zxvf mongodb-linux-x86_64-rhel70-4.0.6.tgz
cd mongodb-linux-x86_64-rhel70-4.0.6/3 在/opt目录下创建mongoDB文件夹
mkdir /opt/mongoDB
移动前面解压的文件到/opt/mongoDB目录下,并且重命名为mongodbserver:
mv mongodb-linux-x86_64-rhel70-4.0.6 /opt/mongoDB/
cd /opt/mongoDB
mv mongodb-linux-x86_64-rhel70-4.0.6 mongodbserver4 在mongodbserver目录下创建日志文件夹和数据库文件夹
cd mongodbserver/
mkdir log
mkdir data5 创建配置文件夹和配置文件
在/opt/mongoDB/mongodbserver目录下创建配置文件夹:
mkdir etc
创建配置文件mongodb.conf:
cd /opt/mongoDB/mongodbserver/etc
vim mongodb.conf # 输入如下内容
dbpath=/opt/mongoDB/mongodbserver/data
logpath=/opt/mongoDB/mongodbserver/log/mongodb.log
port=27017
fork=true
journal=false
storageEngine=mmapv1
6 启动MongoDB
第一次启动不需密码,也没有任何用户,通过shell命令可直接进入,进入到mongodbserver上当下的bin目录,执行./mongo即可,如下所示:
cd /opt/mongoDB/mongodbserver/bin
./mongod --config /opt/mongoDB/mongodbserver/etc/mongodb.conf
启动后,有如下信息所示:
about to fork child process, waiting until server is ready for connections.
forked process: 4382
child process started successfully, parent exiting
此时访问http://npfdev1:27017/ , 可以在页面上看到:
It looks like you are trying to access ...等信息7 添加管理用户
利用mongo命令连接mongoDB服务端,注意mongoDB没有root用户,只有能管理用户的用户userAdminAnyDatabase:
cd /opt/mongoDB/mongodbserver/bin/
./mongo
启动成功大致出现如下的提示信息:
MongoDB shell version v4.0.6
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("4031a60a-158e-4d73-963b-c411961040ec") }
MongoDB server version: 4.0.6
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, seehttp://docs.mongodb.org/
Questions? Try the support grouphttp://groups.google.com/group/mongodb-user
Server has startup warnings:
2019-02-22T09:38:33.826+0800 I STORAGE [initandlisten]
...
>
# 添加用户
> use admin
switched to db admin
> db.createUser({user:"michael",pwd:"michael123",roles:[{role:"userAdminAnyDatabase",db:"admin"}]});
# 添加成功后会看到下面的输出信息:
Successfully added user: {"user" : "michael","roles" : [{"role" : "userAdminAnyDatabase","db" : "admin"}]
}
>
此时可用show users或db.system.users.find()查看已有用户
show users;
db.system.users.find();
添加完管理用户后,使用权限方式再次开启MongoDB,不要用kill直接杀掉mongodb进程。如果杀掉了进程,到data目录下删除mongo.lock文件。可使用db.shutdownServer()关闭。先退出及关闭MongoDB:
> db.shutdownServer();
> exit;
#./mongod --shutdown
8 使用权限方式启动MongoDB
在配置文件中添加:auth=true,然后启动:
cd /opt/mongoDB/mongodbserver/bin
./mongod --config /opt/mongoDB/mongodbserver/etc/mongodb.conf
进入mongo shell使用admin数据库验证,如果不验证,不能做任何操作:./mongo # 进入mongo shell> use admin;
switched to db admin
> db.auth("michael","michael123"); # 认证,返回1表示成功
1
>9 将MongoDB下的可执行文件bin目录添加到系统路径中
修改/etc/profile文件添加MongoDB下的bin文件路径vim /etc/profile # 在末尾的PATH变量后面添加下面命令
export PATH=...:/opt/mongoDB/mongodbserver/bin
执行source /etc/profile,使系统环境变量立即生效
此时可测试直接执行mongo命令是否能成功:mongo # 连接成功,输出下面信息
MongoDB shell version v4.0.6
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("70a91e71-a651-4fa1-ac79-d91c51124232") }
MongoDB server version: 4.0.6
>
# 切换用户
> use admin;
switched to db admin
> db.auth("michael","michael123")
1
> db.shutdownServer()
2019-02-22T10:59:29.846+0800 E QUERY [js] Error: shutdownServer failed: {"ok" : 0,"errmsg" : "not authorized on admin to execute command { shutdown: 1.0, lsid: { id: UUID("70a91e71-a651-4fa1-ac79-d91c51124232") }, $db: "admin" }","code" : 13,"codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.shutdownServer@src/mongo/shell/db.js:453:1
@(shell):1:1
在执行关闭命令有提示:shutdownServer failed,执行下面命令添加权限,解决问题:
db.updateUser("michael",{roles : [{"role" : "userAdminAnyDatabase","db" : "admin"},{"role" : "dbOwner","db" : "admin"},{"role" : "clusterAdmin", "db": "admin"}]})
# 此时执行命令:db.shutdownServer()
> db.shutdownServer()
server should be down...
2019-02-22T11:08:02.600+0800 I NETWORK [js] trying reconnect to 127.0.0.1:27017 failed
2019-02-22T11:08:02.601+0800 I NETWORK [js] reconnect 127.0.0.1:27017 failed failed
>
mongod --shutdown # 退出主程序
10 将MongoDB设置为系统服务并且设置开机启动
首先添加MongoDB为系统服务,执行下面的命令:
vim /etc/rc.d/init.d/mongod # 添加下面的内容
start(){
/opt/mongoDB/mongodbserver/bin/mongod --config /opt/mongoDB/mongodbserver/etc/mongodb.conf
}stop(){
/opt/mongoDB/mongodbserver/bin/mongod --config /opt/mongoDB/mongodbserver/etc/mongodb.conf --shutdown
}case "$1" instart)start;;stop)stop;;restart)stopstart;;*)echo
$"Usage: $0 {start|stop|restart}"exit 1
esac
保存完成后,添加执行权限:chmod +x /etc/rc.d/init.d/mongod
测试启动是否成功:
# service mongod start
about to fork child process, waiting until server is ready for connections.
forked process: 7292
child process started successfully, parent exiting
关闭MongoDB服务:service mongod stop
重启MongoDB服务:service mongod restart
验证是否启动成功:lsof -i :27017 # 输出下面信息,启动成功
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mongod 7395 root 11u IPv4 84018 0t0 TCP localhost:27017 (LISTEN)
Python操作MongoDB的库下载连接:
https://pypi.python.org/pypi/pymongo