728x90

파이썬을 사용하여 XML을 다룰때 BeautifulSoup을 많이 사용합니다.
새로 환경을 구성하여 BeautifulSoup을 이용하는데
이전에 보지 못했던 에러가 발생했습니다. 

강의 예제 코드 돌리다만난 에러라니...

 

핵심 에러 메세지는 다음과 같습니다.
BeautifulSoup 사용시 지정한 Feature가 없다는 내용입니다. 

FeatureNotFound: Couldn't find a tree builder with the features you requested: xml. Do you need to install a parser library?

 

lxml 패키지 설치하기

`xml`이 문제라고 하는데 정확히 어떤 라이브러리를 설치해야 하는지 알려주지는 않는군요.
구글을 통해 검색을 해보니 `lxml` 라이브러리의 설치가 필요한 것 같습니다. 
Jupyter 노트북을 사용중이라 아래와 같이 설치를 진행해 봤습니다.

!pip 로 주피터 노트북에서 직접 패키지를 설치해 봅니다

설치가 되었으니 이제 잘 되겠지...했으나...
계속 패키지가 없다고 에러가 나옵니다.
난감하네요.

하아... 계속 에러가...

 

그래서 조금 더 검색을 해보니
주피터 노트북을 재기동 하라는 이야기가 있습니다. 
구동중인 주피터를 중지하고 다시 실행했습니다.

Shutdown this notebook server (y/[n])? y
[C 11:01:20.436 NotebookApp] Shutdown confirmed
[I 11:01:20.439 NotebookApp] Shutting down 3 kernels
[I 11:01:20.443 NotebookApp] Kernel shutdown: 7a48be4a-c426-427b-b974-e8e26fccc994
[I 11:01:20.443 NotebookApp] Kernel shutdown: 45325d5b-9d8f-4f43-956f-d2b030475625
[I 11:01:20.443 NotebookApp] Kernel shutdown: d1b14c79-3741-4a14-9d0c-a5fe03a65532
[I 11:01:20.567 NotebookApp] Starting buffering for 45325d5b-9d8f-4f43-956f-d2b030475625:2d7ed833d3fe445c8b3ad49096ce9deb
[I 11:01:20.571 NotebookApp] Kernel shutdown: 45325d5b-9d8f-4f43-956f-d2b030475625
...
...
[I 11:01:20.967 NotebookApp] Shutting down 0 terminals
%
% jupyter notebook
[I 11:01:28.154 NotebookApp] Serving notebooks from local directory: /Users/nopd/dev
[I 11:01:28.154 NotebookApp] Jupyter Notebook 6.4.8 is running at:
[I 11:01:28.154 NotebookApp] http://localhost:8888/?token=731a38a75b038a956951174a7aa6da6d75acd13fe855ebd6
[I 11:01:28.154 NotebookApp]  or http://127.0.0.1:8888/?token=731a38a75b038a956951174a7aa6da6d75acd13fe855ebd6
[I 11:01:28.154 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 11:01:28.157 NotebookApp]

    To access the notebook, open this file in a browser:
        file:///Users/nopd/Library/Jupyter/runtime/nbserver-45577-open.html
    Or copy and paste one of these URLs:
        http://localhost:8888/?token=731a38a75b038a956951174a7aa6da6d75acd13fe855ebd6
     or http://127.0.0.1:8888/?token=731a38a75b038a956951174a7aa6da6d75acd13fe855ebd6

다시 파일을 열어 코드를 실행해보니 이제 잘 됩니다. 

주피터 재기동후 성공!

 

요약

0. 에러를 만난다
1. 에러를 잘 보고 필요한 패키지를 찾는다 : lxml
2. 주피터 노트북을 재기동한다
3. 계속 파이썬 코드를 잘 짠다

728x90
728x90

데이터베이스 마이그레이션은 참 번거로운 작업입니다.
상황에 따라서는 메인터넌스를 걸고 서비스를 잠시 중단해야 할 수도 있고
그걸 원하지 않는다면 dual-write 등의 수단을 통해
데이터베이스를 싱크업 하는 과정을 수행해야만 합니다. 

마이그레이션이 이번 글의 주제는 아닙니다.
다만 마이그레이션이 필요하지만 메인터넌스 윈도우를 만들고 싶지 않아 
데이터베이스를 매뉴얼하게 옮기는 것을 고민하다
문득 <데이터베이스의 모든 테이블 레코드 갯수를 한번에 뽑고 싶다>는
자체 요구사항이 생겨 확인한 내용을 정리해 봅니다.

데이터베이스의 모든 레코드 갯수 쿼리

데이터베이스에 있는 모든 테이블의 레코드 갯수를 카운트 하는 것은
아래의 쿼리를 통해 수행할 수 있습니다. 

SELECT SUM(TABLE_ROWS) 
  FROM INFORMATION_SCHEMA.TABLES 
 WHERE TABLE_SCHEMA = '##데이터베이스이름##';

 

모든 테이블 단위로 레코드 갯수 그룹화하는 쿼리

데이터베이스 내에 테이블이 많다면
각 테이블별로 레코드 갯수를 카운트 하고 싶을지도 모릅니다. 
INFORMATION_SCHEMA.TABLES 가 갖고 있는
몇 가지 컬럼을 활용해서 Group By 하면 쉽게 쿼리할 수 있습니다. 

SELECT TABLE_NAME, TABLE_ROWS
  FROM INFORMATION_SCHEMA.TABLES 
 WHERE TABLE_SCHEMA = '##데이터베이스이름##';

 

자, 이제 마이그레이션을....다시... ㅜㅜ

728x90
728x90

파이썬을 이용한 머신러닝 학습을 하다보면
여러가지 알고리즘을 구현한 패키지를 많이 쓰게 됩니다. 
알고리즘 자체를 이해하고 구현하려는 것이 아닌 이상
잘 정비되어 등록된 패키지를 쓰는 것이 훨씬 유용합니다.

그 중 하나가 LightGBM으로 Gradient Boosting Model 알고리즘의 구현체입니다. 
이름에서 알 수 있는 것처럼 Light 가 붙어 있기 때문에 
최대한 가볍고 빠르게 GBM 알고리즘 방식으로 
데이터를 분석하기 위해 사용되는 알고리즘 입니다. 

여튼, 참 좋은 물건이지만 가끔 pip로 설치되지 않을 때가 있습니다. 
설치가 잘 안되는 경우 직접 코드를 다운로드 받아 빌드할 필요가 있습니다. 

설치방법 #1. pip install lightgbm

가장 기본적인 설치방법입니다. 
pip를 이용해서 lightgbm 을 설치하는 방식이죠. 
네, 이걸로 잘 되기만 했다면 이 포스팅을 쓰고 있지도 않을 것 같습니다 ㅎㅎ

pip install lightgbm

 

설치방법 #2. homebrew를 이용한 설치 (macOS)

제가 mac을 쓰고 있어서...homebrew 를 이용한 설치 방법도 정리해 봅니다. 
homebrew 에서도 패키지 이름이 lightgbm 으로 되어 있기 때문에 
brew install lightgbm 명령을 이용하시면 되겠습니다. 

brew install lightgbm

설치방법 #3. GitHub에서 소스코드 받아서 빌드하기

#1, #2의 방법으로 설치가 잘 되지 않았다면 GitHub에 업데이트 된
lightgbm 소스코드를 다운로드 받아 cmake나 gcc로 빌드할 수도 있습니다. 

////////////////////////////////////// using cmake 
// Install CMake, if not installed
brew install cmake

// Install OpenMP
brew install libomp

// Build and Install
git clone --recursive https://github.com/microsoft/LightGBM
cd LightGBM
mkdir build
cd build
cmake ..
make -j4

////////////////////////////////////// using gcc
// Install CMake, if not installed
brew install cmake

// Install gcc
brew install gcc # -> CHECK GCC VERSION!!

// Build and Install
git clone --recursive https://github.com/microsoft/LightGBM
cd LightGBM
export CXX=g++-7 CC=gcc-7  # -> USE INSTALLED GCC VERSION!!
mkdir build
cd build
cmake ..
make -j4

 

제 경우는 #3의 cmake 활용 방법으로 설치할 수 있었습니다. 
즐거운 머신러닝 학습 되시길 바랍니다~!

더 자세한 소스 기반 빌드는... 아래쪽입니다!

 

Installation Guide — LightGBM 3.3.2.99 documentation

© Copyright 2022, Microsoft Corporation. Revision 32a7f10d.

lightgbm.readthedocs.io

 

728x90
728x90

React를 공부하고 있는 중입니다.
React를 공부하려다 그동안 확바뀐 Node.js 까지 익히는 중입니다 ㅎㅎ
npm의 유틸리티중 하나인 npx를 이용해서 create-react-app 패키지를 설치하고 
이를 이용한 보일러 플레이팅을 하는 것이 보고 있는 책의 예제입니다.

그런데!

놀랍게도 (언제나 그렇듯이) 개발 환경 구성부터 산넘어 산입니다. 
오늘 만난 에러는 npx를 이용한 React 보일러 플레이팅 중 발생했습니다. 

% npx create-react-app test
npm ERR! cb.apply is not a function

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/nopd/.npm/_logs/2022-02-05T17_54_47_354Z-debug.log
[ 'create-react-app@latest' ] 설치가 오류 코드 1로 실패했습니다

뭔가 발음하기에도 거시기한 cb.apply가 함수가 아니라는 에러!
아버지를 아버지라 부르지 못하고... 함수를 함수라 부르지 못하는 것인가 싶었지만 차치하고...
몇 군데 검색을 해봐도 딱히 쓸만한 방법을 찾질 못했습니다. 

구글 검색에서 걸린 것들은 대부분, 
- node_module 관련 경로를 다 지우고 다시 해봐라 
- node 버전을 올려라 
- 캐시를 지워라 
정도였던 것으로 기억됩니다.
안타깝게도 전부 저한테는 쓸모가 없었습니다. 

뭐가 문제일까 하다가 발견한 것이 Mac 환경에서 brew로 설치한 패키지들과 
설치된 경로를 알긴 어렵지만, 여튼 설치되어 있는 node 관련 패키지들이
서로 다른 경로에 있지만 후자가 우선순위를 갖게 되면서 문제처럼 보였습니다. 

사실 create-react-app 을 설치하기 전에도 
node의 버전이 brew에서 확인되는 것과 다르네? 하면서
/usr 하위에 만들어져 있던 심링크를 삭제했던 기억이 뇌리를 스쳤습니다. 

혹시 npx도..!?!?!?!?!

정답이었습니다. 
brew로 최신 버전의 npx를 설치했지만, 
이는 which npx 로 확인했을 때의 경로와 차이가 있었습니다. 

// #################### BEFORE
% which npx
/usr/local/bin/npx

// #################### AFTER
% which npx
/opt/homebrew/bin/npx

그렇습니다.
brew는 독립적인 생명체라, /opt/homebrew/bin 하위에 패키지를 저장하고 있었습니다.
원래 /usr/local/bin 경로에 있던 npx를 과감하게 삭제하니 모든것이 정상으로 돌아왔습니다!

% npx create-react-app test
Need to install the following packages:
  create-react-app
Ok to proceed? (y)
npm WARN deprecated tar@2.2.2: This version of tar is no longer supported, and will not receive security updates. Please upgrade asap.

Creating a new React app in /Users/nopd/dev/clonecoding_practice/test.

Installing packages. This might take a couple of minutes.
Installing react, react-dom, and react-scripts with cra-template...


added 1365 packages in 47s

169 packages are looking for funding
  run `npm fund` for details

Initialized a git repository.

Installing template dependencies using npm...
npm WARN deprecated source-map-resolve@0.6.0: See https://github.com/lydell/source-map-resolve#deprecated

added 33 packages in 2s

169 packages are looking for funding
  run `npm fund` for details
Removing template package using npm...


removed 1 package, and audited 1398 packages in 1s

169 packages are looking for funding
  run `npm fund` for details

8 moderate severity vulnerabilities

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.

Created git commit.

Success! Created test at /Users/nopd/dev/clonecoding_practice/test
Inside that directory, you can run several commands:

  npm start
    Starts the development server.

  npm run build
    Bundles the app into static files for production.

  npm test
    Starts the test runner.

  npm run eject
    Removes this tool and copies build dependencies, configuration files
    and scripts into the app directory. If you do this, you can’t go back!

We suggest that you begin by typing:

  cd test
  npm start

Mac 환경에서 brew를 이용해서 node를 설치했고 
혹시나 pkg 를 다운로드받아 설치한 적이 있는 것 같은 기억이 있다면 
포스팅에 소개한 방법을 이용해 평안한 하루를 만드시기 바라겠습니다!

 

 

728x90

+ Recent posts