Thứ Ba, 17 tháng 9, 2019

Python : Sử dụng module 'python3-jsonrpc'

Trong module 'python3-jsonrpc' vừa sửa và cài đặt từ mã nguồn
https://github.com/wheeler-microfluidics/application_repository.jsonrpc

Tập tin proxy.py được sửa lại cho python 3 như sau :


import urllib.request, urllib.parse, urllib.error

from jsonrpc.json import dumps, loads


class JSONRPCException(Exception):

    def __init__(self, rpcError):

        Exception.__init__(self)

        self.error = rpcError
        

class ServiceProxy(object):

    def __init__(self, serviceURL, serviceName=None):

        self.__serviceURL = serviceURL

        self.__serviceName = serviceName


    def __getattr__(self, name):

        if self.__serviceName != None:

            name = "%s.%s" % (self.__serviceName, name)

        return ServiceProxy(self.__serviceURL, name)


    def __call__(self, *args):

         postdata = dumps({"method": self.__serviceName, 'params': args, 'id':'jsonrpc'})

         postdata = postdata.encode('utf-8')

         respdata = urllib.request.urlopen(self.__serviceURL, postdata).read()

         resp = loads(respdata.decode('utf-8'))

         if 'error' in resp:

             raise JSONRPCException(resp['error'])

         else:

             return resp['result']        


Giả dụ, ta có phương thức get_status ở địa chỉ url "http://localhost/services/jsonrpc", sử dụng proxy gọi phương thức này như sau :

>>> from jsonrpc import ServiceProxy

>>> proxy = ServiceProxy("http://localhost/services/jsonrpc")

>>> print("Server status :", proxy.get_status())


Chi tiết dùng module này xem tại đây :

https://www.jsonrpc.org/archive_json-rpc.org/python-json-rpc.html


Đóng gói và cài đặt một module tạo mới cho Python

Khi nâng cấp lên dùng python 3, có trường hợp một số thư viện cũ ta dùng trong python 2 không có cho python 3. Khi đó, nếu có mã nguồn của thư viện này ta có thể chuyển chúng sang mã của python 3 với công cụ 2to3 (xem bài trước) rồi đóng gói và cài đặt module này để dùng.

Dưới đây lấy ví dụ gói jsonrpc với mã nguồn tải về tại đây để minh họa :
https://github.com/wheeler-microfluidics/application_repository.jsonrpc

Sau khi tải mã về, dùng công cụ 2to3 để chuyển mã rồi sửa lỗi nếu có. Ta sẽ đóng gói và cài đặt module này như sau

Ta đặt tên gói này là 'python3-jsonrpc'. Tạo và thay thế tập tin setup.py với nội dung như sau :

#!/usr/bin/env python

from distutils.core import setup

setup(name='python3-jsonrpc',
      version=0.1,
      description='A json-rpc package which implements JSON-RPC over HTTP.',
      keywords='JSON RPC',
      license='LGPL',
      packages=['jsonrpc'])


Đóng gói module này với lệnh

$ python3 setup.py sdist


Ta thấy gói python3-jsonrpc-0.1.tar.gz được tạo trong thư mục dist
Bây giờ ta có thể cài đặt gói này với lệnh :

$ sudo python3 -m pip install python3-jsonrpc-0.1.tar.gz

Nếu có lỗi
/usr/bin/python3: No module named pip 

Cài đặt pip3
$ sudo apt-get install python3-pip 


Nếu tiếp tục còn lỗi
AttributeError: module 'importlib._bootstrap' has no attribute 'SourceFileLoader'

Cài pip3 với lệnh sau
$ curl -sS https://bootstrap.pypa.io/get-pip.py | sudo python3


Kiểm tra gói vừa được cài đặt :

$ python3 -m pip list


Ta thấy trong danh sách hiển thị gói python3-jsonrpc

Nếu không dùng nữa, ta gỡ gói này ra ta với lệnh :

$ sudo python3 -m pip uninstall python3-jsonrpc


Thứ Tư, 11 tháng 9, 2019

Nâng cấp lên python 3 trong Ubuntu

Nâng cấp lên python 3 trong Ubuntu theo các bước sau

1. Cập nhật và kiểm tra xem python3.6 có sẵn để cài đặt hay không :

$ sudo apt-get update

$ apt-cache search python3.6


2. Nếu chưa có thì thêm PPA cho python3.6

$ sudo add-apt-repository ppa:jonathonf/python-3.6 

$ sudo apt-get update


3. Cài đặt python3.6

$ sudo apt-get install python3.6


4. Kiểm tra phiên bản python3.6 vừa cài đặt :

$ python3.6

Python 3.6.3 (default, Oct  6 2017, 00:00:00) 

[GCC 4.8.4] on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> exit()


5. Kiểm tra phiên bản python3 mặc định của hệ thống :

$ python3 --version


6. Nếu phiên bản hiển thị không phải là phiên bản 3.6 vừa được cài, ta dùng update-alternatives để cấu hình python3 cho hệ thống.

Để hiển thị danh sách các lựa chọn để cấu hình cho python3 :
$ update-alternatives --list python3


Cập nhật bảng danh sách này để thêm phiên bản python 3.6 vừa cài đặt nếu phiên bản này chưa có trong danh sách hoặc nếu danh sách này chưa được tạo cho python3:
$ sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 100


7. Chọn phiên bản 3.6 cho python3 :
$ update-alternatives --config python3


Kiểm tra phiên bản python3 vừa được cấu hình :
$ python3 --version


Dùng công cụ 2to3 để chuyển script python 2 sang python 3

Công cụ 2to3 được cài đặt cùng với python3 để chuyển đổi các script từ python 2 sang python 3. Dưới đây là một số ví dụ sử dụng công cụ này :

Hiển thị những khác biệt giữa tập tin hiện thời và phiên bản của nó ở python 3
$ 2to3 example.py


Viết đè những chuyển đổi lên tập tin nguồn và lưu một bản backup cho nó
$ 2to3 -w example.py


Chuyển đổi những tập tin trong thư mục hiện hành sang python 3 và sang thư mục 'python3' mà không thay đổi nội dung của những tập tin này trong thư mục hiện hành.
$ 2to3 --output-dir=python3 -W -n .




Thứ Năm, 5 tháng 9, 2019

Nâng cấp lên maven 3 trong Ubuntu

Nâng cấp lên maven 3 trong Ubuntu theo các bước sau

1. Thêm PPA cho maven3
$ sudo add-apt-repository "deb http://ppa.launchpad.net/natecarlson/maven3/ubuntu precise main"


Nếu có lỗi :
sudo: add-apt-repository: command not found
Cho Ubuntu 18.04, 16.04, et 14.04, phải cài thêm gói software-properties-common như sau
$ sudo apt-get install -y software-properties-common


2. Cập nhật gói với repository vừa thêm
$ sudo apt-get update


Rồi kiểm xem maven3 có sẵn để cài đặt hay chưa
$ apt-cache search maven3


3. Cài đặt maven3
$ sudo apt-get install maven3


4. Kiểm tra xem phiên bản maven3 vừa cài đặt có được chọn xài hay chưa
$ mvn -version


Nếu chưa thì cấu hình để chọn phiên bản maven 3 như sau :
$ sudo update-alternatives --config mvn


Nếu update-alternatives chưa nhận biết phiên bản maven3 vừa được cài đặt, ta  phải cài đặt như sau rồi cấu hình lại với lệnh trên
$ sudo update-alternatives --install /usr/bin/mvn mvn /usr/share/maven3/bin/mvn 100


Đôi khi việc cài đặt maven3 làm thay đổi phiên bản javac đang dùng, ta có thể kiểm tra phiên bản javac và cấu hình lại với lệnh sau :
$ javac -version
$ sudo update-alternatives --config javac