-
Notifications
You must be signed in to change notification settings - Fork 56
Building Python MongoDB Driver
The instructions provided below specify the steps to build Python MongoDB Driver (PyMongo) version 3.4.0 on IBM z Systems for following distributions:
- RHEL (6.8, 7.1, 7.2, 7.3)
- SLES (11 SP4, 12, 12 SP1, 12 SP2)
- Ubuntu (16.04, 16.10)
General Notes:
-
When following the steps below please use a standard permission user unless otherwise specified.
-
A directory
/<source_root>/
will be referred to in these instructions, this is a temporary writable directory anywhere you'd like to place it.
- RHEL 6.8
sudo yum install git openssl openssl-devel pyOpenSSL python-devel python-setuptools python-setuptools-devel python-virtualenv
- RHEL (7.1, 7.2, 7.3)
sudo yum install git openssl openssl-devel pyOpenSSL python-devel python-setuptools python-setuptools-devel python-virtualenv libffi-devel python-devel
- SLES 11 SP4
sudo zypper install git python-xml python-openssl openssl-devel openssl
- SLES (12, 12 SP1, 12 SP2)
sudo zypper install git python-xml python-devel python-cffi openssl-devel libffi-devel
- Ubuntu (16.04, 16.10)
sudo apt-get update
sudo apt-get install git openssl libssh-dev python python-openssl python-setuptools
mkdir /<source_root>/
cd /<source_root>/
git clone git://github.com/mongodb/mongo-python-driver.git pymongo
cd pymongo
git checkout 3.4.0
-
RHEL 6.8
curl -o /tmp/ez_setup.py https://bootstrap.pypa.io/ez_setup.py sudo /usr/local/bin/python2.7 /tmp/ez_setup.py sudo /usr/local/bin/easy_install pip sudo rm -f /usr/bin/pip sudo ln -s /usr/local/bin/pip /usr/bin/pip
-
RHEL (7.1, 7.2, 7.3) and Ubuntu (16.04, 16.10)
sudo easy_install pip
-
SLES 11 SP4
curl -o /tmp/ez_setup.py https://bootstrap.pypa.io/ez_setup.py sudo /usr/local/bin/python2.7 /tmp/ez_setup.py sudo /usr/local/bin/easy_install pip==1.2.1 sudo rm -f /usr/bin/pip sudo ln -s /usr/local/bin/pip /usr/bin/pip
-
SLES (12, 12 SP1, 12 SP2)
cd /<source_root>/ rm -f ez_setup.py* wget https://bootstrap.pypa.io/ez_setup.py && sudo python ez_setup.py sudo easy_install pip==1.2.1
sudo python setup.py install
Access to MongoDB Server is required to execute test cases.
- If MongoDB Server is running on same machine then execute the following:
sudo python setup.py test
- If MongoDB Server is running on remote machine, then create a
test_cases.sh
file with following content:
export DB_IP=<MongoDB_Server_IP>
python setup.py test
- Give execute permission to
test_cases.sh
file and execute it as follows:
chmod +x test_cases.sh
sudo ./test_cases.sh
Note: Execute the below steps only in case of test case failures
- If test_bad_encode test case fails with error: "TypeError: encoder expected a mapping type but got: {'a': {...}}", or if test_get_last_version test case fails with AssertionError then it might be an issue with Python version. Try installing Python 2.7.9 using following steps and re-run the test cases.
- RHEL (6.8, 7.1, 7.2, 7.3)
sudo yum install tar xz wget zlib-devel
- SLES (11 SP4, 12, 12 SP1, 12 SP2)
sudo zypper install tar xz wget zlib-devel
-
Follow the steps in Python recipe to install Python
-
If MongoDB Server is running on same machine then set the build location in path variable
export PATH=<python-build-location>/bin:$PATH
- If MongoDB Server is running on remote machine then put the "export PATH=/bin:$PATH" in first line of test_cases.sh file.
export PATH=<python-build-location>/bin:$PATH
export DB_IP=<MongoDB_Server_IP>
python setup.py test
Re-run test cases as mentined above.
python
You should get something like the following result
Python 2.3.4 (#1, Jan 9 2007, 16:40:09)
[GCC 3.4.6 20060404 (Red Hat 3.4.6-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
Now verify that PyMongo has been installed
>>> import pymongo
If you get no errors from this import statement, then PyMongo has been installed successfully.To exit from python prompt either use ctrl + d or type exit().
The example code section given below is used to perform a basic test to ensure that the Python MongoDB Driver is working as expected, and can connect to, modify and query a MongoDB server.
Python MongoDB Driver needs access to a running MongoDB server, either on your local server or a remote system. The following commands are an example of how to start up a MongoDB server and then connect to it with the client shell, but note that MongoDB has not been installed as part of these instructions, and typically you would be running MongoDB on a remote server.
mongod > /tmp/mongodb.log &
mongo --host localhost
Which would typically give a command prompt such as
MongoDB shell version: 2.4.10 connecting to: localhost:27017/test >
The example code below will need to be modified to use your remote server hostname or IP address instead of "localhost", if you are attempting to connect to your own (remote) server.
Create a file named test.py with the content shown below. This code connects to a MongoDB server, inserts some documents and then queries the database to read them back and display them.
Remember, if you are connecting to a remote server then you need to substitute the localhost
with the hostname or IP address of the MongoDB server.
import pprint
import pymongo
from pymongo import MongoClient
server="localhost";
database="ibm_test_db";
collection="mongodb_python_driver";
serverdb="mongodb://" + server + ":27017/";
client = MongoClient(serverdb)
db = client[database];
db[collection].drop();
header = {"company": "IBM",
"project": "MongoDB Driver",
"language": "python",
"version": "3.4.0"};
db[collection].insert_one(header);
for i in range (0, 3):
doc = {"line": i};
db[collection].insert_one (doc);
for gotdoc in db[collection].find():
pprint.pprint(gotdoc);
python test.py
The output from the above should look similar to:
{u'_id': ObjectId('560eb1ff051ba90001d927a0'),
u'company': u'IBM',
u'language': u'python',
u'project': u'MongoDB Driver',
u'version': u'3.4.0'}
{u'_id': ObjectId('560eb1ff051ba90001d927a1'), u'line': 0}
{u'_id': ObjectId('560eb1ff051ba90001d927a2'), u'line': 1}
{u'_id': ObjectId('560eb1ff051ba90001d927a3'), u'line': 2}
The information provided in this article is accurate at the time of writing, but on-going development in the open-source projects involved may make the information incorrect or obsolete. Please open issue or contact us on IBM Z Community if you have any questions or feedback.