반응형

 

iCalendar 란?
아이캘린더(iCalendar)는 인터넷 사용자들이 다른 인터넷 사용자들에게 전자 메일을 이용하여 미팅 요청과 할 일을 보내거나 .ics 확장자로 파일들을 공유할 수 있게 해 주는 컴퓨터 파일 형식이다. 아이캘린더 데이터 파일을 받은 사람들은 이메일 클라이언트나 캘린더 프로그램 따위를 이용하여 보낸이에게 쉽게 응답할 수 있고 다른 미팅 일정을 역제안할 수 있다.
[출처] - 위키백과-아이캘린더


Python의 vobject를 이용하여 iCalendar를 만들수 있다. vobject를 이용하여 vCard 역시 파싱할 수 있다.


 

 

반응형
반응형
가상환경 필요한 이유

파이썬에서 간단한 수준으로 연습한다면 가상환경의 필요성을 크게 느끼지는 못한다. 하지만 다음과 같은 이유 때문에 가상환경은 유용하다.

1. 프로젝트를 하고 나서 배포해야할때 이 프로젝트를 위해서 추가로 설치된 패키지들이 무엇인지 구별할 필요가 있다. 여러 개의 프로젝트를 한다면 패키지들이 썩여서 구별하는 것은 여간 어려운 일이 아니다.

2. 시간이 지나면 설치된 패키지들이 업데이트 되는데 패키지들간의 의존하는 것도 있어서 버전을 잘 맞추는 건 불가능 할 수도 았다.

3. 파이썬 자체의 버전도 다르게 사용해야 할때가 있다.

가상환경 사용법

파이썬 3.4부터 기본으로 포함된 venv 패키지를 사용해서 가상환경을 만들 수 있다.
먼저, 가상환경을 만들려면 다음 명령어를 사용한다.
c:/project> python -m venv project_env

가상환경을 활성화 시키기 위해서 다음 명령어를 사용한다. (윈도우즈 기준으로)
C:\project>project_env\scripts\activate
(project_env) C:\project>


가상환경에서 패키지 관리

가상환경에서 설치한 패키지들과 버전을 파일로 저장해 두면 배포할때 유용하다. 명령어는 다음과 같다.
> pip freeze > requirements.txt

저장해둔 파일로 아래 명령어와 같이 실행하면 필요한 패키지와 버전을 한번에 설치할 수 있다.
> pip install -r requirements.txt

 

반응형
반응형

하나의 큰 파일을 작은 크기(10MB) 크기로 잘라서 여러개 파일로 저장하는 기능이다.

-------------------------------------

import os

def file_split(filepath1, filename1):
    # 예: 10MB
    size_limit = 1024*1024*10
    with open (filepath1 + filename1, 'rb') as fi:
        i = 0
        b = fi.read(size_limit)
        while b != b'':
            with open (filepath1 + filename1 + '.' + str(i), 'wb') as fo:
                fo.write(b)
                fo.close()
            i = i + 1
            b = fi.read(size_limit)
        fi.close()

------------------------------------------

여러 개 파일로 나누어서 저장된 파일을 다시 하나의 큰 파일로 이어 붙이는 기능이다.

------------------------------------------

def file_join(filepath1, filename1):
    filepathname = filepath1 + filename1
    with open(filepathname, 'wb') as fo:
        i = 0
        while os.path.exists(filepathname + '.' + str(i)) :
            with open(filepathname + '.' + str(i), 'rb') as fi:
                fo.write(fi.read())
            i = i + 1
        fo.close()

--------------------------------------------

테스트를 수행한다.

--------------------------------------------

if __name__ == "__main__" :
    file_split('d:/dev/', '큰 파일.pdf')
    file_join('d:/dev/', '큰 파일.pdf')

 

 

반응형
반응형

파이썬에서 GUI 프로그램을 만들기 위해서 필요한 GUI 도구들을 알아본다.

 

1. Tkinter

Tkinter는 Tcl/Tk에 대한 파이썬 Wrapper로서 Tcl/Tk를 파이썬에 사용할 수 있도록 한 Lightweight GUI 모듈이다. Tcl은 Tool Command Language의 약자로서 일종의 프로그래밍 언어이며, Tk는 크로스 플랫폼에 사용되는 일종의 GUI 툴킷이다. Tkinter는 타 GUI 프레임워크나 툴킷에 비해 지원되는 위젯들이 부족하고 UI도 그렇게 예쁘지 않다는 단점이 있지만, Python 설치시 기본적으로 내장되어 있는 파이썬 표준 라이브러리이기 때문에 쉽고 간단한 GUI 프로그램을 만들 때 활용될 수 있다.

Tkinter는 파이썬에 기본 내장되어 있기 때문에 별도로 설치할 필요가 없다. Tkinter를 사용하기 위해서는 tkinter 모듈을 import 하면 된다.

 

2. PyQt

PyQt는 Qt의 Python Language Binding 중의 하나이다. Qt는 C++로 작성된 크로스 플랫폼 프레임워크로 The Qt Company에서 작성한 프로그램이다. PyQt를 사용하면, 동일한 파이썬코드를 사용하여 윈도우즈, Mac, 리눅스에서 모두 동작하는 GUI 프로그램을 작성할 수 있다. PyQt4와 PyQt5가 있으며, PyQt4는 더이상 지원되지 않는다고 한다.

GtDesigner 라는 강력한 UI 디자인 도구를 제공하는 장점이 있다. PyQt는 오픈소스로서 개인용으로는 무료이지만 상업용으로는 License를 구입해야 한다. 

 

3. PySide

PyQt4와 유사한 Python Qt 바인딩이며, 크로스 플랫폼을 지원한다. 

PyQt4와 거의 비슷한 PySide는 오픈소스로서 상업용으로도 무료이다. 하지만, PySide는 오픈소스를 지속적으로 관리하는 부분이 소홀한 만큼 상업용 프로젝트에는 부담스러울 수 있다. LGPL을 따른다. 

 

4. PyGTK

리눅스 환경에 잘 맞으며, 윈도우즈에서는 돌리기에 좀 불편한 편이다. GUI 디자인 도구로 Glade를 제공한다. Tkinter에 비해서는 기능이 많은 편이며, LGPL 라이센스 정책을 따른다.

 

5. wxPython

크로스-플랫폼을 지원하과 각 플랫폼에 어울리는 위젯을 제공한다. Tkinter에 비해 기능이 충실한 편이다. wxGlade와 같은 것 등의 GUI 디자인 도구를 제공한다. 

GPL과 유사한 Wxwidgets 라이선스 정책을 따른다.

 

6. Kivy

Kivy는 Windows, MacOSX, Linux, Android iOS 및 Raspberry Pi와 같은 여러 플랫폼을 지원한다. 오픈 소스이며 툴킷에는 20 개 이상의 위젯이 제공됩니다. 네이티브 위젯이 아닌 OpenGL ES 2를 통해 렌더링되므로 운영 체제 전반에 걸쳐 모양이 균일하다. Kivy를 사용하여 Android 및 iOS 용 멀티 터치 모바일 앱을 제작할 수도 있다고 한다. 게임을 만들때 좋은 GUI 라이브러리이다. MIT 라이선스 하에서 무료로 사용할 수 있다. Kv lang 이라는 별도의 개발언어로 보다 간략하게 화면을 개발할 수 있다. 이 개발언어를 보다 편리하게 사용할 수 있도록 designer가 제공된다.

 

 

반응형
반응형

파이썬은 엄청나게 많은 패키지를 제공한다. 파이썬을 설치하면 기본적으로 함께 설치되는 패키지도 있지만, 좀더 고급 기능이 필요하거나, 기본에서 제공하지 않는 다양한 패키지를 손쉽게 설치하는 방법을 제공한다.

패키지를 설치하는 첫 번째 방법은 pip 명령어로 설치하는 것이다. 쉽고 일반적인 방법이다.

> pip install <pi 이름>

 또는 기본적인 파이썬 실행방법으로 해도 된다.

> python -m pip install <pi 이름>

 여기서 pi 이름은 전체 파이썬 패키지 중에서 구분하기 위한 명칭인데, 이것은 pypi.org 에서 확인할 수 있다. pi Package index를 의미한다. 이 명령을 실행하면, 설치하고 싶은 패키지와 그 패키지가 필요로 하는 추가적인 패키지들을 알아서 다운로드 받아 설치해 준다. 패키지들 간에 의존하는 버전들이 좀 복잡할 수 있는데, 이런 부분들을 자동으로 처리해 주기 때문에 편리하다.

네트워크 환경에 따라서, pip 명령어가 필요한 패키지를 자동으로 다운로드 받는 과정에서 SSL 관련 오류가 날 수 있다.

Could not fetch URL https://pypi.python.org/simple/pip/: There was a problem confirming the ssl certificate : [SSL CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)

이런 경우, <Python 설치경로>\Lib\site-packages\pip\_vendor\requests 에 있는 session.py을 수정해야 한다. session.py 파일에서 self.verify = True self.verify = False로 변경하여 저장하고 다시 pip install 명령을 실행하면 된다.

두 번째 방법은 파이썬 휠(Wheel)을 다운로드 받아서 직접 설치하는 것이다. 이 패키지들 간의 의존관계, 그리고 정확한 패키지 버전들을 모두 확인해서 직접 설치하는 방법이다. 특별한 이유가 없다면 추천하지 않는 방법이지만 알아둘 필요가 있다.

 

 

 

필요한 휠 파일을 다운로드 받기 위해서 pypi.org에 접속하여 패키지를 검색하면, 패키지의 설명과 다운로드를 제공한다.

 

검새결과
패키지 설명
패키지 다운로드

 

다운로드 하기 위해서 제공되는 여러 개 파일 중에서 파이썬의 버전과 플랫폼(윈도우, 32비트 또는 64비트 등)을 확인하고 내려 받아야 한다. 예를 들어, 파이썬 3.7버전은 cp37, 윈도우는 win, 64비트는 amd64를 선택해서, wxPython-4.0.6-cp37-cp37m-win_amd64.whl 파일을 내려 받아야 한다. 내려 받은 휠 파일은 역시 pip install 명령어로 설치한다. 설치하는 패키지가 필요로 하는 추가적인 패키지가 이미 설치되어 있어야 한다. 그렇지 않다면 오류가 나도 필요로 하는 버전을 확인해서 먼저 설치해 주어야 한다.

> pip install wxPython-4.0.4-cp37-cp37m-win_amd64.whl

출처: https://bombook.tistory.com/47 [봄북:티스토리]

반응형
반응형

방법1.

--trusted-host 옵션을 통해 해당 설치 오류는 간단히 해결할 수 있습니다. 

> pip install  xxxxxxx  --trusted-host pypi.org --trusted-host files.pythonhosted.org

 

방법 2.

윈도우에서는 %HOME%\pip\pip.ini 파일을 생성하고 아래 코드를 추가해 주시면 됩니다.

[global]
trusted-host = pypi.org
                      files.pythonhosted.org

 

반응형
반응형

 
What inspired you to create C++? 
In the really old days, people had to write their code directly to work on the hardware. They wrote load and store instructions to get stuff in and out of memory and they played about with bits and bytes and stuff. You could do pretty good work with that, but it was very specialized. Then they figured out that you could build languages fit for humans for specific areas. Like they built FORTRAN for engineers and scientists and they built COBALT for businessmen. And then in the mid-'60s, a bunch of Norwegians, mostly Ole-Johan Dahl and Kristen Nygaard thought why can’t you get a language that sort of is fit for humans for all domains, not just linear algebra and business. And they built something called SIMULA. And that’s where they introduced the class as the thing you have in the program to represent a concept in your application world. So if you are a mathematician, a matrix will become a class, if you are a businessman, a personnel record might become a class, in telecommunications a dial buffer might become a class—you can represent just about anything as a class. And they went a little bit further and represented relationships between classes; any hierarchical relationship could be done as a bunch of classes. So you could say that a fire engine is a kind of a truck which is a kind of a car which is a kind of a vehicle and organize things like that. This became know as object-oriented programming or also in some variance of it as data abstraction. And my idea was very simple: to take the ideas from SIMULA for general abstraction for the benefit of sort of humans representing things... so humans could get it with low level stuff, which at that time was the best language for that was C, which was done at Bell Labs by Dennis Ritchie. And take those two ideas and bring them together so that you could do high-level abstraction, but efficiently enough and close enough to the hardware for really demanding computing tasks. And that is where I came in. And so C++ has classes like SIMULA but they run as fast as C code, so the combination becomes very useful. 

What makes C++ such a widely used language? 
If I have to characterize C++’s strength, it comes from the ability to have abstractions and have them so efficient that you can afford it in infrastructure. And you can access hardware directly as you often have to do with operating systems with real time control, little things like cell phones, and so the combination is something that is good for infrastructure in general. Another aspect that’s necessary for infrastructure is stability. When you build an infrastructure it could be sort of the lowest level of IBM mainframes talking to the hardware for the higher level of software, which is a place they use C++. Or a fuel injector for a large marine diesel engine or a browser, it has to be stable for a decade or so because you can’t afford to fiddle with the stuff all the time. You can’t afford to rewrite it, I mean taking one of those ships into harbor costs a lot of money. And so you need a language that’s not just good at what it’s doing, you have to be able to rely on it being available for decades on a variety of different hardware and to be used by programmers over a decade or two at least. C++ is not about three decades old. And if that’s not the case, you have to rewrite your code all the time. And that happens primarily with experimental languages and with proprietary commercial languages that change to finish—to meet fads. C++’s problem is the complexity part because we haven’t been able to clean it up. There’s still code written in the 80’s that are running and people don’t like their running codes to break. It could cost them millions or more.

반응형
반응형

하나의 큰 파일을 작은 크기(10MB) 크기로 잘라서 여러개 파일로 저장하는 기능이다.

import os

def file_split(filepath1, filename1):
    # 예: 10MB
    size_limit = 1024*1024*10
    with open (filepath1 + filename1, 'rb') as fi:
        i = 0
        b = fi.read(size_limit)
        while b != b'':
            with open (filepath1 + filename1 + '.' + str(i), 'wb') as fo:
                fo.write(b)
                fo.close()
            i = i + 1
            b = fi.read(size_limit)
        fi.close()

여러 개 파일로 나누어서 저장된 파일을 다시 하나의 큰 파일로 이어 붙이는 기능이다.

def file_join(filepath1, filename1):
    filepathname = filepath1 + filename1
    with open(filepathname, 'wb') as fo:
        i = 0
        while os.path.exists(filepathname + '.' + str(i)) :
            with open(filepathname + '.' + str(i), 'rb') as fi:
                fo.write(fi.read())
            i = i + 1
        fo.close()

테스트를 수행한다.

if __name__ == "__main__" :
    file_split('d:/dev/', '큰 파일.pdf')
    file_join('d:/dev/', '큰 파일.pdf')

 

반응형

+ Recent posts