2011-08-03 3 views
15

Python으로 작성된 프로그램에 변경 사항을 적용하는 가장 좋은 방법은 무엇입니까? Python으로 작성된 소프트웨어가 정기적으로 업데이트됩니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 모든 컴퓨터에는 Windows 7이 설치됩니다.Python 응용 프로그램을 원격으로 업데이트하는 방법

또한 내 질문의 모호함을 변명하십시오. 이것은 처음으로 업데이트 절차를 구현해야합니다. 추가하고 싶은 세부 사항을 자유롭게 언급하십시오.

+2

현재 설치/배포 용 응용 프로그램을 포장하고 있습니까? 그것은 단지 스크립트 파일입니까? 응용 프로그램 코드를 업데이트해야합니까, 아니면 웹에서 데이터 업데이트를 가져 오는 것입니까? –

답변

7

나는 자식 또는 전복과 같은 소스 제어 프로그램을 사용하는 것이 좋습니다. 또한 코드를 보는 모든 사람이 괜찮 으면 github에 코드를 게시 할 수 있습니다. github에서 코드를 가져올 수 있습니다. 비공개로 만들 수는 있지만 비용을 지불해야하며 모든 사용자는 github 계정을 만들고 git install으로 설정해야합니다.

소스 제어 프로그램을 사용하는 경우 다른 사람들은 명령을 실행하여 수동으로 편집을 풀어야하지만이 작업을 수행하는 스크립트 pr 배치 파일을 만들어 시작할 때 또는 일정한 간격으로 실행하게 할 수 있습니다 .

당신이 이것을하고 싶다면 코드를 서버에두고 SSH 지원과 git을 설정해야 할 것입니다. 모든 서버를 설정하지 않으려면 github을 사용하는 것이 좋습니다. 나는 강하게 당신이 그것을로 전환하는 것이 좋습니다, 당신은 이미 InnoSetup와 프로그램을 포장하지 않는 경우 https://github.com/

+0

Neil이 여기 있습니다. Mercurial과 git 모두 좋은 옵션이 될 것이고, x 일마다 호출되고 가장 최신 버전의 repo를 가져 오는 간단한 '자동 업데이트'스크립트를 쉽게 작성할 수 있습니다. – Jonathanb

9

-

git- http://git-scm.com/

는 (윈도우 버전에 대한 다운로드로 이동 msysGit을 선택)

github의를 이런 종류의 일을 쉽게 할 수있는 시설이 있기 때문입니다. InnoSetup 스크립트에서 이미 존재하는 경우 (예 : 내부 구성 파일 또는 이와 유사한 파일이있는 경우) 업데이트해서는 안되는 파일과 같은 특수한 상황을 지정할 수 있습니다.

다음으로 클라이언트 컴퓨터에서 새 버전의 앱을 찾을 수 있도록하려면 현재 릴리스의 버전 번호와 최신 버전 설치 프로그램 exe의 URL이있는 매우 작은 파일을 공용 웹 서버에 보관하십시오. 이 파일을 유용하게 사용하려면 새로운 버전의 프로그램을 릴리스 할 때마다이 파일을 업데이트해야하며 InnoSetup 스크립트의 버전 번호와 프로그램의 APP_VERSION 상수도 업데이트해야합니다. 새로운 버전의 HTTP를 통해 웹 서버에서 현재 버전의 파일을 검색하고 버전을 비교하여 사용할 수있을 때 감지

  1. :

    그런 다음 업데이터 자신의이 부분을 처리해야합니다 앱의 자체 APP_VERSION에 숫자를 입력하십시오. 클라이언트 컴퓨터가 인터넷에 액세스 할 수없고 요청을 처리하는 동안 GUI를 차단하지 않으면 정상적으로 실패하는 방식으로이 쿼리를 수행해야합니다 (네트워크 문제로 인해 쿼리가 강제로 대기하도록 할 경우 타임 아웃 동안 길다).

  2. 최신 버전을 사용할 수있는 경우 사용자에게 업데이트 할 것인지 물어보고 예를 들어 TEMP 디렉토리에 업데이트 된 설치 프로그램을 다운로드합니다. 어떤 GUI 툴킷을 사용하고 있는지에 따라 다운로드 중에 진행 상황을 표시하는 다양한 메커니즘이 있습니다. 이것은 설치 프로그램이 적어도 MB가 될 가능성이 있기 때문에 좋은 생각입니다.
  3. 앱을 닫고 특별한 업데이트 스크립트 in the background을 실행 한 다음 앱을 다시 시작합니다.업데이트 스크립트는이 작업을 수행하는 (가장 쉬운 방법은 완전히 죽을 원래의 과정을 기다립니다

은 때까지 명령 줄 인수로 원래 프로세스의 PID를 전달하고 초 정도마다 업데이트 스크립트 send a query signal 0 to that process을하는 것입니다 그런 다음 사용자에게 "기다려주십시오 ..."대화 상자를 표시하는 동안 백그라운드에서 자동으로 설치 프로그램을 실행할 수 있습니다. 설치 프로그램이 완료되고 반환 코드에서 성공을보고하면 업데이터가 프로그램을 다시 시작할 수 있습니다.

앱의 크기에 따라 git 또는 다른 SCM을 사용하는 방법보다 대역폭 낭비가 더 큽니다. 이 방법을 사용하는 모든 업데이트에는 최신 버전의 응용 프로그램을 다운로드하기위한 전체 설치 프로그램이 필요하지만 SCM은 변경된 파일 만 다운로드합니다. 그러나 일반 웹 서버를 제외하고 특별한 서버 기능이 필요하지 않으며 사용자 컴퓨터에 SCM 클라이언트를 특별하게 설치하지 않아도된다는 이점이 있습니다.

게다가 InnoSetup은 일반적으로 멋지다. :-)

+0

기존의 앱이 아직 열려 있는지 여부를 확인하는 기술적으로 더 좋은 또 다른 방법은 앱이 실행될 때마다 앱이 임시 파일에 미리 읽기 이름을 가진 읽기 잠금을 얻게하는 것입니다. 이는 앱이 PID를 해제하지만 다른 새로운 앱이 즉시 동일한 PID를 사용하는 경쟁 상황 시나리오를 피할 수 있기 때문에 멋지다. 또한 사용자가 앱의 여러 인스턴스를 시작하지 못하게되어 업데이트 프로그램을 혼동시킬 수 있습니다. – DSimon