pymongo安装(pymongo安装不成功什么原因)

http://www.itjxue.com  2023-02-23 11:12  来源:未知  点击次数: 

Docker:容器管理(启动参数,查看容器和日志,进入和修改容器)

摘要: Docker

容器是一个精简版的操作系统,一般一个容器只运行一个应用,容器通过镜像创建,使用 docker run 命令创建,容器起到了 隔离 作用,容器和容器之间独享空间和网络等

容器的基本操作包括创建(启动),停止,重启,查看,检查等,容器通过镜像创建,使用 docker run 命令创建,需要指定run参数,镜像名,容器执行命令,语句格式如下

在实际使用中启动一个镜像,例如

-e 设置环境变量,格式是 -e k1=v1 -e k2=v2 ,使得在docker镜像中的程序能够直接访问到环境变量,同时可以作为配置参数放在docker run启动镜像的时候设置,而不是写死在dockerfile在build的过程中,-e和dockerfile中的 ENV 变量作用相同,当变量重名时-e替换ENV,下面测试一些-e参数,在Dockerfile指定环境变量

直接构建成容器

开启一个终端启动容器内部,打印指定的环境变量a

此时在run指令中增加-e设置环境变量,可见-e替换了Dockerfile中指定的环境变量

因为一个镜像可以启动多个容器,所以可以通过设置不同-e达到设置不同配置参数的目的,比如下一个例子在Dockerfile中设置和将环境变量写入yaml文件再供Python调用,执行的内容为打印yaml配置文件的参数内容,比如下面这个例子先看下目录结构

其中config.yml是一个空配置文件,在run.sh中先使用echo写入追加配置参数到config.yml在执行Python脚本

Dockerfile中启动run.sh脚本作为容器执行命令

在启动容器时,使用-e指定环境变量,在run.sh中echo将环境变量拿到和写入配置文件,测试多次以不同的配置参数启动容器如下

-v 设置挂载运行,将宿主机当前目录下的文件挂载到容器中/home目录下,例如

如果挂载的目录和Dockerfile中的COPY的目录不一致, -v会替代COPY或者ADD ,例如现在Docker中COPY一个文件到容器/home目录下

同目录下start.sh内容是打印1

构建镜像结束后,指定-v启动,起始挂载另外一个目录,目录下start.sh内容是打印2

docker run参数中最后的COMMAND会覆盖Dockerfile中指定的 CMD ,例如执行echo 2替换原始Dockerfile中的CMD echo 1,输出结果是2且执行完毕后退出

对于Dockerfile中的 ENTRYPOINT 指定的启动命令docker run的COMMAND不会覆盖,如果要覆盖Docker中的ENTRYPOINT需要指定docker run中的 --entrypoint 参数,格式是

测试一个Dockerfile输出1

在docker run中使用--entrypoint覆盖Dockerfile中的ENTRYPOINT

容器启动后通过 docker ps 或者 docker container ls 查看容器,可以增加额外参数比如 -a 显示所有容器,默认只显示运行的容器,可以增加 --no-trunc 参数使得显示结果不截断,例如

显示结果分别显示了容器的ID,镜像,执行命令,创建时间,状态,端口映射(宿主机-容器)和容器名称。对于已经运行的容器可以使用 docker stop 停止,如果在docker run时增加--rm参数则停止的容器保留不会自动删除,例如

除了docker stop命令还有一种停止容器的命令 docker kill ,相比于docker stop,docker kill是 强制立即停止 ,而docker stop是先给了容器10秒(默认)的时间,使得容器有一定的时间处理、保存程序执行现场, 优雅的退出程序 ,例如

在容器停止之后可以使用 docker start 再启动一个停止的容器,例如

除此之外可以使用 docker restart ,此时容器可以使停止的也可以是在运行中的,例如

查看容器详情使用 docker inspect ,比如

在以上截取的内容中展示了容器详情,包括容器id,创建时间,执行命令和参数,执行状态,容器pid,落脚点,环境变量,网络设置,端口映射等,也可以使用Go语言风格输出指定的详情,比如分别只看容器的pid和容器的执行命令

容器是一个操作系统,可以进入这个操作系统查看容器的运行情况,有多种方式进入容器,其中主要是使用 docker exec 进入容器,在一个运行中的容器中执行一个命令,使用 -it 并带有 /bin/bash 命令就可以进入容器,比如

除了/bin/bash也可以是其他命令挂载exec后面则可以直接对一个运行中的容器执行命令,比如查看容器的进入落脚点路径,容器中的内存情况

当容器以后台 -d 运行时,日志运行在容器内部,可以进入容器内部查看日志,也可以使用 docker logs 查看日志,以一个flask api接口的容器为例,日志写入文件,同时也会输出在flask的控制台

创建Dockerfile以及构建镜像,启动容器

启动一个脚本不断请求api接口

进入容器内部查看日志

另一种方式是直接使用 docker logs 命令,比如使用 -f 追踪输出,并且从最后的第1行开始输出

此时宿主机的logs目录下为空,容器中的logs目录下存在detail.log文件,如果使用 -v 将宿主机目录挂载到容器作为容器写入的目录,则容器中数据的变动会同步到本地,这样可以直接在本地查看日志,修改容器启动为 -v 挂载的形式

此时本地logs目录下开始产生日志,且这个日志和容器内的logs目录下一致

如果容器内的内容改变了,此时删除容器从镜像重新启动容器则改动的内容将不会存在,如果相对修改过的容器保留下来则可以从容器生成新的镜像,先测试以下容器内修改在删除的容器后将不再生效,在已有容器中使用pip安装Python包

此时退出容器,并且删除容器,最后从镜像重新生成容器

此时进入容器检查,并不存在pymongo包

如果要容器变化保存下来需要以这个新容器生成一个镜像,使用 docker commit ,语法如下

以新安装pymongo的容器为例,对新容器使用docker commmit

新生成的镜像叫做xiaogp/my_image_test:v2

从新镜像启动容器并进入容器查看存在新安装的pymongo

如何执行python第三方包windows exe格式

python第三方包的windows安装文件exe格式, 这上面有很多python第三方包的二进制安装文件,包括32位和64位的。下载安装就ok了!

这下面有很多python第三方包的二进制安装文件,包括32位和64位的。下载安装就ok了!

包括了mysqldb,ldap等。

Index by date:

fiona

scikit-image

netcdf4

mercurial

scikits.audiolab

numba

llvmpy

python-igraph

rpy2

numpy

opencv

zope.interface

sfepy

quantlib

gdal

imread

django

psychopy

cx_freeze

msgpack

regex

cellcognition

vigra

scikit-learn

pytables

h5py

blender-mathutils

htseq

bioformats

simplejson

pyzmq

mako

simpleitk

qimage2ndarray

ujson

vlfd

libsvm

liblinear

cgkit

scipy

distribute

noise

theano

pyalembic

openimageio

pyaudio

pymca

pyamg

pgmagick

lxml

steps

sqlalchemy

cffi

biopython

python-ldap

pycurl

nipy

nibabel

pygments

mahotas

py-postgresql

pyamf

planar

holopy

pyvisa

jcc

polymode

polygon

cython

pyropes

llist

shapely

vtk

pymongo

libpython

meshpy

pandas

umysql

epydoc

coverage

cheetah

pyrxp

pybluez

pythonmagick

bsdiff4

pymssql

pymol

boost.python

orange

requests

pywcs

python-sundials

pymix

pyminuit

pylzma

pyicu

assimulo

basemap

pygraphviz

pyproj

mpi4py

spyder

pytz

pyfits

mysql-python

pygame

pycparser

twisted

pil

qutip

openexr

nipype

python-snappy

visvis

docutils

pyhdf

pyqwt

kivy

scikits.umfpack

psycopg

ets

guiqwt

veusz

pyqt

pyside

dpmix

py-fcm

scikits.hydroclimpy

smc.freeimage

scipy-stack

ipython

nose

mxbase

numexpr

pyyaml

ode

virtualenv

aspell_python

tornado

pywavelets

bottleneck

networkx

statsmodels

pylibdeconv

pyhook

lmfit

slycot

ndimage

scikits.scattpy

cvxopt

pymc

pysparse

scikits.odes

matplotlib

vpython

pycuda

pyopencl

pymvpa

pythonnet

cld

mod_wsgi

nltk

python-levenshtein

rtree

pywin32

scientificpython

sympy

thrift

pyopengl-accelerate

mdp

pyopengl

gmpy

reportlab

natgrid

scikits.vectorplot

pyreadline

milk

blosc

pycogent

pip

gevent

scons

carray

python-dateutil

jinja2

markupsafe

jsonlib

pysfml

fonttools

silvercity

console

python-cjson

pycluster

cdecimal

pytst

autopy

sendkeys

ceodbc

fipy

psutil

pyephem

pycifrw

blist

line_profiler

pydbg

bitarray

pyglet

python-lzo

faulthandler

delny

pyexiv2

ilastik

twainmodule

scitools

pyspharm

casuarius

pyodbc

greenlet

nitime

pylibtiff

mmtk

pycairo

pysqlite

curses

videocapture

bazaar

nlopt

trfit

libsbml

oursql

sphinx

cellprofiler

py2exe

re2

liblas

cgal-python

pymedia

ffnet

pyfftw

libxml-python

pyfltk

pymex

pymatlab

zodb3

mmlib

pygtk

pyserial

babel

scikits.ann

scikits.delaunay

numeric

pulp

nmoldyn

pymutt

iocbio

jpype

wxpython

pybox2d

dipy

mmseg

pynifti

scikits.samplerate

scikits.timeseries

vitables

quickfix

为什么连接不到本机的mongodn数据库,总是报connect fail的错

Mongoengine是一个可以操作MongoDB数据库的对象-文档映射器(Object-Document Mapper)。出于工作需要,最近在使用MongoDB+Django实现一个数据录入系统小网站的过程中,出现通过Mongoengine无法从 Python 调用 MongoDB,在connect()数据库一步的时候出现下面错误:

from mongoengine import connect

connect(‘healthmanager‘)

Traceback (most recent call last):

File "console", line 1, in module

File "/usr/local/python2.7/lib/python2.7/site-packages/mongoengine/connection.py", line 164, in connect

return get_connection(alias)

File "/usr/local/python2.7/lib/python2.7/site-packages/mongoengine/connection.py", line 126, in get_connection

raise ConnectionError("Cannot connect to database %s :\n%s" % (alias, e))

ConnectionError: Cannot connect to database default :

False is not a read preference.

其原因在于,通过“pip install mongoengine”安装的mongoengine为0.9.0版本,同时该命令把pymongo-3.0.2的模块依赖也装好了,而pymongo-3.0.2跟mongoengine-0.9.0之间存在兼容问题,从而导致默认的数据库无法connect成功。

import pymongo

pymongo.version

‘3.0.2‘

另外,CentOS 6.5下用“pip install pymongo”安装的pymongo为3.0.2版本,而mongoengine作为pymongo的一个扩展包,是没有安装的。因此在使用mongoengine的时候,安装完mongoengine后,需要降低pymongo版本至3.0以下。、

解决方法:

= pip install mongoengine # 安装mongoengine

= pip uninstall pymongo # 卸载pymongo-3.0.2

= pip install pymongo==2.8 # 安装pymongo-2.8

重新connect:

from mongoengine import connect

connect(‘healthmanager‘)

MongoClient(‘localhost‘, 27017)

如何往mongodb存python set

下载python中MongoDB的驱动程序

pip install pymongo

然后确保MongoDB已经安装且可以正常运行,去官网下载相应版本:

mkdir -p /home/tools

cd/home/tools

wget

解压文件并修改目录名

tar -zxvf mongodb-linux-x86_64-3.4.2.tgz

mv mongodb-linux-x86_64-3.4.2 mongodb3.4.2

ln -s mongodb_3.4.2 mongodb

MongoDB 的可执行文件位于 bin 目录下,所以可以将其添加到?PATH?路径中

export PATH=/home/tools/mongodb/bin:$PATH

MongoDB的数据存储在data目录的db目录下,但是这个目录在安装过程不会自动创建,所以你需要手动创建data目录,并在data目录中创建db目录。

mkdir -p /data/db

在mongo安装目录中的bin目录执行mongod命令来启动mongdb服务

./mongod --dbpath /data/db

如果想进入MongoDB后台管理

./mongo

# ./mongoMongoDB shell version v3.4.2connecting to: mongodb://127.0.0.1:27017MongoDB server version: 3.4.2Welcome to the MongoDB shell......................

times number of files.2017-03-12T01:15:04.901+0800 I CONTROL ?[initandlisten]

使用用户 admin 使用密码 123456 连接到本地的 MongoDB 服务上

mongodb://admin:123456@localhost/...

创建数据库(如果数据库不存在,则创建数据库,否则切换到指定数据库)

... use test2017-03-12T01:34:04.361+0800 E QUERY ? ?[thread1] SyntaxError: missing ; before statement @(shell):3:4

use test

switched to db test db

test show dbs ? ?#查看所有数据库admin ?0.000GB

local ?0.000GB

python操作mongodb

连接mongodb

#!/usr/bin/env python# -*- coding:utf-8 -*-from pymongo import MongoClient

conn = MongoClient('192.168.0.113', 27017)

db = conn.mydb ?#连接mydb数据库,没有则自动创建my_set = db.test_set#使用test_set集合,没有则自动创建

插入数据(insert插入一个列表多条数据不用遍历,效率高, save需要遍历列表,一个个插入)

my_set.insert({"name":"zhangsan","age":18})#或my_set.save({"name":"zhangsan","age":18})

插入多条

#添加多条数据到集合中users=[{"name":"zhangsan","age":18},{"name":"lisi","age":20}] ?

my_set.insert(users)

#或my_set.save(users)

查询数据(查询不到则返回None)

#查询全部for i in my_set.find(): ? ?print(i)#查询name=zhangsan的for i in my_set.find({"name":"zhangsan"}): ? ?print(i)print(my_set.find_one({"name":"zhangsan"}))

更新数据

my_set.update( ? query, ? ?#查询条件

update, ? ?#update的对象和一些更新的操作符 ? {

upsert: boolean, ? ?#如果不存在update的记录,是否插入

multi: boolean, ? ? ? ?#可选,mongodb 默认是false,只更新找到的第一条记录

writeConcern: document ? ?#可选,抛出异常的级别。 ? }

)

把上面插入的数据内的age改为20

my_set.update({"name":"zhangsan"},{'$set':{"age":20}})

删除数据

my_set.remove( ? query, ? ?#(可选)删除的文档的条件 ? {

justOne: boolean, ? ?#(可选)如果设为 true 或 1,则只删除一个文档

writeConcern: document ? ?#(可选)抛出异常的级别 ? }

)

#删除name=lisi的全部记录my_set.remove({'name': 'zhangsan'})#删除name=lisi的某个id的记录id = my_set.find_one({"name":"zhangsan"})["_id"]

my_set.remove(id)#删除集合里的所有记录db.users.remove() 

mongodb的条件操作符

# ? ?() ?大于 - $gt# ? ?() ?小于 - $lt# ? ?(=) ?大于等于 - $gte# ? ?(= ) ?小于等于 - $lte

#例:查询集合中age大于25的所有记录for i in my_set.find({"age":{"$gt":25}}): ? ?print(i)

type(判断类型)

#找出name的类型是String的for i in my_set.find({'name':{'$type':2}}): ? ?print(i)

类型队对照列表

排序

在MongoDB中使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序,-1为降序。

for i in my_set.find().sort([("age",1)]): ? ?print(i)

limit和skip

#limit()方法用来读取指定数量的数据#skip()方法用来跳过指定数量的数据#下面表示跳过两条数据后读取6条for i in my_set.find().skip(2).limit(6): ? ?print(i)

IN

#找出age是20、30、35的数据for i in my_set.find({"age":{"$in":(20,30,35)}}): ? ?print(i)

OR

#找出age是20或35的记录for i in my_set.find({"$or":[{"age":20},{"age":35}]}): ? ?print(i)

all

'''dic = {"name":"lisi","age":18,"li":[1,2,3]}

dic2 = {"name":"zhangsan","age":18,"li":[1,2,3,4,5,6]}

my_set.insert(dic)

my_set.insert(dic2)'''for i in my_set.find({'li':{'$all':[1,2,3,4]}}): ? ?print(i)#查看是否包含全部条件#输出:{'_id': ObjectId('58c503b94fc9d44624f7b108'), 'name': 'zhangsan', 'age': 18, 'li': [1, 2, 3, 4, 5, 6]}

push/pushAl

my_set.update({'name':"lisi"}, {'$push':{'li':4}})for i in my_set.find({'name':"lisi"}): ? ?print(i)#输出:{'li': [1, 2, 3, 4], '_id': ObjectId('58c50d784fc9d44ad8f2e803'), 'age': 18, 'name': 'lisi'}my_set.update({'name':"lisi"}, {'$pushAll':{'li':[4,5]}})for i in my_set.find({'name':"lisi"}): ? ?print(i)#输出:{'li': [1, 2, 3, 4, 4, 5], 'name': 'lisi', 'age': 18, '_id': ObjectId('58c50d784fc9d44ad8f2e803')}

pop/pull/pullAll

#pop#移除最后一个元素(-1为移除第一个)my_set.update({'name':"lisi"}, {'$pop':{'li':1}})for i in my_set.find({'name':"lisi"}): ? ?print(i)#输出:{'_id': ObjectId('58c50d784fc9d44ad8f2e803'), 'age': 18, 'name': 'lisi', 'li': [1, 2, 3, 4, 4]}#pull (按值移除)#移除3my_set.update({'name':"lisi"}, {'$pop':{'li':3}})#pullAll (移除全部符合条件的)my_set.update({'name':"lisi"}, {'$pullAll':{'li':[1,2,3]}})for i in my_set.find({'name':"lisi"}): ? ?print(i)#输出:{'name': 'lisi', '_id': ObjectId('58c50d784fc9d44ad8f2e803'), 'li': [4, 4], 'age': 18}

多级路径元素操作

先插入一条数据

dic = {"name":"zhangsan", ? ? ? "age":18, ? ? ? "contact" : { ? ? ? ? ? "email" : "1234567@qq.com", ? ? ? ? ? "iphone" : "11223344"}

}

my_set.insert(dic)

#多级目录用. 连接for i in my_set.find({"contact.iphone":"11223344"}): ? ?print(i)#输出:{'name': 'zhangsan', '_id': ObjectId('58c4f99c4fc9d42e0022c3b6'), 'age': 18, 'contact': {'email': '1234567@qq.com', 'iphone': '11223344'}}result = my_set.find_one({"contact.iphone":"11223344"})print(result["contact"]["email"])#输出:1234567@qq.com#多级路径下修改操作result = my_set.update({"contact.iphone":"11223344"},{"$set":{"contact.email":"9999999@qq.com"}})

result1 = my_set.find_one({"contact.iphone":"11223344"})print(result1["contact"]["email"])#输出:9999999@qq.com

还可以对数组用索引操作

dic = {"name":"lisi", ? ? ? "age":18, ? ? ? "contact" : [

{ ? ? ? ? ? "email" : "111111@qq.com", ? ? ? ? ? "iphone" : "111"},

{ ? ? ? ? ? "email" : "222222@qq.com", ? ? ? ? ? "iphone" : "222"}

]}

my_set.insert(dic)

#查询result1 = my_set.find_one({"contact.1.iphone":"222"})print(result1)#输出:{'age': 18, '_id': ObjectId('58c4ff574fc9d43844423db2'), 'name': 'lisi', 'contact': [{'iphone': '111', 'email': '111111@qq.com'}, {'iphone': '222', 'email': '222222@qq.com'}]}#修改result = my_set.update({"contact.1.iphone":"222"},{"$set":{"contact.1.email":"222222@qq.com"}})print(result1["contact"][1]["email"])#输出:222222@qq.com

anaconda里怎么安装python包pymongo

笔者使用Sublime Text 3,安装和配置插件Anaconda步骤如下:

安装:

打开package control菜单,输入install或者直接点击install package命令菜单

在新窗口输入Anaconda并点击第一个备选项进行安装。

安装完成后会显示messages文档

配置:

点击Anaconda插件默认设置菜单,弹出设置文档

在大约90行的位置,我们修改一下Python主程序的位置路径。

如何在服务器中安装 pymongo

windows下的python安装pymongo扩展

下载对应.exe后直接安装,在过程中会自动填写python的安装路径。下一步。完成。

测试

from pymongo import Connection

conn = Connection("localhost", 27017)

db = conn.test

db.name

print db.name

(责任编辑:IT教学网)

更多

推荐网络媒体文章