윈도우 우분투 가상 환경 설치 (feat.chocolatey)

Page content

개요

  • 크롤링 교재에서 윈도우에 우분투 가상 환경을 설치하는 부분이 있어서 실제로 잘 되는지 테스트를 해보았다.
  • 향후 교재를 활용한다면, 해당 가상환경에서 진행 하는 것도 고려할 수 있다.
  • 가상환경은 vagrant를 활용했다.

교재

  • 파이썬을 활용한 크롤러 개발과 스크레이핑 입문

Untitled

Step 01. Chocolatey 설치

  • 윈도우에서 많이 활용되는 패키지 매니저가 바로 Chocolatey 이다.
  • 먼저 3가지를 확인해야 한다.
  • 첫번째 PowerShel이 설치 되어 있어야 하며, 최소 지원 버전은 3이다.
    • PowerShell 버전 확인
    • PowerShell 탭을 열고 $PSVersionTable 명령어를 실행한다.
PS C:\Users\j2hoo> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.22621.1778
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.22621.1778
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

Untitled

  • 두번째 .NET Framework 4.5 이상 버전이 설치되어 있어야 함. 현재 시스템에 설치된 .NET Framework 버전을 확인하도록 한다.
PS C:\Users\j2hoo> get-item 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full'

    Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4

Name                           Property
----                           --------
Full                           CBS           : 1
                               Install       : 1
                               InstallPath   : C:\Windows\Microsoft.NET\Framework64\v4.0.30319\
                               Release       : 533320
                               Servicing     : 0
                               TargetVersion : 4.0.0
                               Version       : 4.8.09032
  • PowerShell을 관리자 모드로 실행한다. 그 후에 Get-ExecutionPolicy 를 실행해서 이 값이 Restricted 가 아닌 것을 확인한다.
PS C:\Users\j2hoo> Get-ExecutionPolicy
Unrestricted
  • 만약 Restricted라면 AllSigned나 Bypass로 설정한다.
# ExcutionPolicy를 AllSigned로 설정
$ Set-ExecutionPolicy AllSigned

# ExcutionPolicy를 Bypass로 설정
$ Set-ExecutionPolicy Bypass -Scope Process

Untitled

PS C:\Users\j2hoo> Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
  • 기다리면 Chocolatey가 설치된다.
...
Forcing web requests to allow TLS v1.2 (Required for requests to Chocolatey.org)
Getting latest version of the Chocolatey package for download.
Not using proxy.
Getting Chocolatey from https://community.chocolatey.org/api/v2/package/chocolatey/2.2.0.
Downloading https://community.chocolatey.org/api/v2/package/chocolatey/2.2.0 to C:\Users\j2hoo\AppData\Local\Temp\chocolatey\chocoInstall\chocolatey.zip
Not using proxy.
Extracting C:\Users\j2hoo\AppData\Local\Temp\chocolatey\chocoInstall\chocolatey.zip to C:\Users\j2hoo\AppData\Local\Temp\chocolatey\chocoInstall
Installing Chocolatey on the local machine
Creating ChocolateyInstall as an environment variable (targeting 'Machine')
  Setting ChocolateyInstall to 'C:\ProgramData\chocolatey'
WARNING: It's very likely you will need to close and reopen your shell
  before you can use choco.
Restricting write permissions to Administrators
We are setting up the Chocolatey package repository.
The packages themselves go to 'C:\ProgramData\chocolatey\lib'
  (i.e. C:\ProgramData\chocolatey\lib\yourPackageName).
A shim file for the command line goes to 'C:\ProgramData\chocolatey\bin'
  and points to an executable in 'C:\ProgramData\chocolatey\lib\yourPackageName'.

Creating Chocolatey folders if they do not already exist.

chocolatey.nupkg file not installed in lib.
 Attempting to locate it from bootstrapper.
PATH environment variable does not have C:\ProgramData\chocolatey\bin in it. Adding...
경고: Not setting tab completion: Profile file does not exist at
'C:\Users\j2hoo\OneDrive\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1'.
Chocolatey (choco.exe) is now ready.
You can call choco from anywhere, command line or powershell by typing choco.
Run choco /? for a list of functions.
You may need to shut down and restart powershell and/or consoles
 first prior to using choco.
Ensuring Chocolatey commands are on the path
Ensuring chocolatey.nupkg is in the lib folder
  • Chocolatey 설치 확인을 해본다.
PS C:\Users\j2hoo> choco
Chocolatey v2.2.0
Please run 'choco -?' or 'choco <command> -?' for help menu.
  • 간단하게 firefox를 설치해본다.
PS C:\Users\j2hoo> choco install firefox

Untitled

Step 02 - Choco를 활용하여 virtualbox 및 vagrant 설치

  • choco 사용하여 간단하게 설치를 진행해본다.

check 1 - virtualbox 설치

  • 다음 명령어를 실행한다.
choco install virtualbox

Untitled

  • 아래 명령어를 순차적으로 입력해본다.

    • If disabled:
    # If the repo is not named chocolatey, use the repo name returned by the choco sources command
     choco source enable -n chocolatey
    
    • If not present at all:
    choco source add -n chocolatey -s 'https://chocolatey.org/api/v2/'
    
  • 먼저 virtualbox가 정상적으로 설치가 된다면 아래와 같은 메시지가 나올 것이다.

Untitled

check 2 - vagrant 설치

  • 다음 명령어를 실행한다.
choco install vagrant
  • 실행 시, 중간에 질문이 나오면 A라고 답한다.
    • 질문 : Do you want to run the script?([Y]es/[A]ll
PS C:\Users\j2hoo> choco install vagrant
Chocolatey v2.2.0
Installing the following packages:
vagrant
By installing, you accept licenses for the packages.
Progress: Downloading vagrant 2.3.7... 100%

vagrant v2.3.7 [Approved]
vagrant package files install completed. Performing other installation steps.
The package vagrant wants to run 'chocolateyinstall.ps1'.
Note: If you don't run this script, the installation will fail.
Note: To confirm automatically next time, use '-y' or consider:
choco feature enable -n allowGlobalConfirmation
Do you want to run the script?([Y]es/[A]ll - yes to all/[N]o/[P]rint): A
  • 설치가 완료되면 재부팅을 실행한다.

Untitled

Step 03 - 우분투 내려받고 설치하기

  • Powershell 접속 후 c 드라이브로 이동한다.
  • vagrant 빈 폴더를 생성한다.
  • vagrant로 이동한다.
PS C:\Users\j2hoo> cd c:\
PS C:\> mkdir vagrant

    디렉터리: C:\

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----      2023-07-30   오후 3:25                vagrant

PS C:\> cd .\vagrant\
PS C:\vagrant>
  • vagrant 가상 환경을 설정한다. (파이썬 가상환경을 만드는 과정과 동일하다고 생각한다)
    • 우분투 18.04 LTS 버전을 설치한다.
      • 교재 명령어는 우분투 12.04 버전이다.
PS C:\vagrant> vagrant init hashicorp/bionic64
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
  • Vagrantfile이 생성된다.

Step 04 - 베이그런트로 우분투 가상 환경 실행

  • 위 과정은 한번만 진행하면 된다.
  • 이제 가상 환경을 실행한다.
    • vm을 만들어주고 실행시켜준다.
    • 처음 실행할 때는 설치 때문에 시간이 오래 걸리는 점에 유의한다.
PS C:\vagrant> vagrant up

Untitled

Untitled

  • 상태 확인 명령어는 다음과 같다.
PS C:\vagrant> vagrant status
Current machine states:

default                   running (virtualbox)

The VM is running. To stop this VM, you can run `vagrant halt` to
shut it down forcefully, or you can run `vagrant suspend` to simply
suspend the virtual machine. In either case, to restart it again,
simply run `vagrant up`.
  • 전원을 꺼주는 명령어는 다음과 같다.
vagrant halt
  • 명령어들의 용도나 사용법을 확인하는 것은 다음과 같다.
vagrant -h
  • 가상컴퓨터 환경으로 접속하는 것은 다음과 같다.
vagarnt ssh

Untitled

  • 접속한 상태에서 원래 터미널로 돌아오고 싶다면 logout 명령어를 입력한다.
vagrant@vagrant:~$ logout
Connection to 127.0.0.1 closed.
PS C:\vagrant>
  • 가상컴퓨터를 삭제하는 것은 다음과 같다.
vagrant destroy

Step 05 - 파일 공유하기

  • vagrant는 vagrant 명령어를 실행한 디렉터리 (여기에서는 /vagrant) 디렉터리로 공유한다.
  • 간단하게 test.py 파일을 만들고 다음과 같이 코드를 작성한다.
print("Hello World")
  • 다음과 같이 명령어를 입력한다.

vagrant@vagrant:~$ cd ../../vagrant/
vagrant@vagrant:/vagrant$ ls
test.py  Vagrantfile
vagrant@vagrant:/vagrant$ cat test.py
print("Hello World")

Step 06 - Wget 설치하기

  • 이제 리눅스 배포판 환경에 맞는 패키지 매니저를 설치한다.
    • sudo 이하의 명령어를 실행하면 된다.
vagrant@vagrant:/vagrant$ sudo apt-get install wget
Reading package lists... Done
Building dependency tree
Reading state information... Done
wget is already the newest version (1.19.4-1ubuntu2.2).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Step 07 - 파이썬 가상환경 설정

  • 아래 명령어를 통해 가상환경을 설치하고, 새로운 폴더를 만들어 임의의 가상환경을 생성 하도록 한다.
vagrant@vagrant:/vagrant$ sudo apt-get update
vagrant@vagrant:/vagrant$ sudo apt-get install python3-venv
vagrant@vagrant:/vagrant$ mkdir crawling
vagrant@vagrant:/vagrant$ cd crawling
vagrant@vagrant:/vagrant/crawling$ python3 -m venv venv
vagrant@vagrant:/vagrant/crawling$ ls
venv
  • 가상환경에 접속 후, 다음 라이브러리를 설치한다.

    • jupyter 설치 전 해야 할일 확인이 있다.
    • Vagrantfile 파일을 메모장으로 열고 아래 코드를 추가한다.
      • 위치는 주석처리 된 곳을 찾아서 넣으면 된다.
    # config.vm.network "forwarded_port", guest: 80, host: 8080
    config.vm.network "forwarded_port", guest: 8888, host: 8888
    
    • 그 후에, vagrant 로그아웃 해준 뒤, 명령어 vagrant reload 실행 후, 다시 vagrant ssh를 통해 재 접속한다.
  • 그 후, 다시 가상환경에 접속하여 아래 명령어에 접속한다.

$ source /venv/bin/activate
(venv) $ pip3 install Requests lxml cssselect beautifulsoup4 numpy pandas jupyter

Untitled

  • 에러 발생 시, 아래 명령어 재 실행, 다시 pip3 install ~ 진행한다.
sudo -H pip3 install --upgrade --ignore-installed pip setuptools
  • jupyter notebook을 열 때는 아래 명령어를 활용한다.
(venv) jupyter notebook --ip=0.0.0.0
  • jupyter notebook 파일이 열리면 아래와 같이 간단하게 테스트를 해본다.
import requests
import json
import pandas as pd
import numpy as np
import lxml.html

r = requests.get("http://wikibook.co.kr/python-for-web-scraping/")
html = r.text
root = lxml.html.fromstring(html)
titleElement = root.xpath("//*[@id='content']/div[1]/div[2]/ul/li[1]")

titleElement[0].text

Untitled

출처