yarn 으로 package 를 설치하는데 에러가 발생했다

 

에러 전문

Progress: resolved 763, reused 737, downloaded 0, added 739, done
node_modules/.pnpm/node-sass@9.0.0/node_modules/node-sass: Running install script, done in 260ms
node_modules/.pnpm/node-sass@9.0.0/node_modules/node-sass: Running postinstall script, failed in 366ms
.../node_modules/node-sass postinstall$ node scripts/build.js
│ Binary found at /Users/mik_a/Desktop/dev/ezerp/node_modules/.pnpm/node-sass@9.0.0/node_modules/node-sass/vendor/darwin-arm64-108/binding.node
│ Testing binary
│ Binary has a problem: Error: dlopen(/Users/mik_a/Desktop/dev/ezerp/node_modules/.pnpm/node-sass@9.0.0/node_modules/node-sass/vendor/darwin-arm64-108/binding.node, 0x0001): tried: '/Users/mik_a/Desktop/dev/ezerp/node_modules/.pnpm/node-sa…
│     at Module._extensions..node (node:internal/modules/cjs/loader:1338:18)
│     at Module.load (node:internal/modules/cjs/loader:1117:32)
│     at Module._load (node:internal/modules/cjs/loader:958:12)
│     at Module.require (node:internal/modules/cjs/loader:1141:19)
│     at require (node:internal/modules/cjs/helpers:110:18)
│     at module.exports (/Users/mik_a/Desktop/dev/ezerp/node_modules/.pnpm/node-sass@9.0.0/node_modules/node-sass/lib/binding.js:19:10)
│     at Object.<anonymous> (/Users/mik_a/Desktop/dev/ezerp/node_modules/.pnpm/node-sass@9.0.0/node_modules/node-sass/lib/index.js:13:35)
│     at Module._compile (node:internal/modules/cjs/loader:1254:14)
│     at Module._extensions..js (node:internal/modules/cjs/loader:1308:10)
│     at Module.load (node:internal/modules/cjs/loader:1117:32) {
│   code: 'ERR_DLOPEN_FAILED'
│ }
│ Building the binary locally
│ Building: /usr/local/bin/node /Users/mik_a/Desktop/dev/ezerp/node_modules/.pnpm/node-gyp@8.4.1/node_modules/node-gyp/bin/node-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library=
│ gyp info it worked if it ends with ok
│ gyp verb cli [
│ gyp verb cli   '/usr/local/bin/node',
│ gyp verb cli   '/Users/mik_a/Desktop/dev/ezerp/node_modules/.pnpm/node-gyp@8.4.1/node_modules/node-gyp/bin/node-gyp.js',
│ gyp verb cli   'rebuild',
│ gyp verb cli   '--verbose',
│ gyp verb cli   '--libsass_ext=',
│ gyp verb cli   '--libsass_cflags=',
│ gyp verb cli   '--libsass_ldflags=',
│ gyp verb cli   '--libsass_library='
│ gyp verb cli ]
│ gyp info using node-gyp@8.4.1
│ gyp info using node@18.16.0 | darwin | arm64
│ gyp verb command rebuild []
│ gyp verb command clean []
│ gyp verb clean removing "build" directory
│ gyp verb command configure []
│ gyp verb find Python Python is not set from command line or npm configuration
│ gyp verb find Python Python is not set from environment variable PYTHON
│ gyp verb find Python checking if "python3" can be used
│ gyp verb find Python - executing "python3" to get executable path
│ gyp verb find Python - executable path is "/Library/Frameworks/Python.framework/Versions/3.12/bin/python3"
│ gyp verb find Python - executing "/Library/Frameworks/Python.framework/Versions/3.12/bin/python3" to get version
│ gyp verb find Python - version is "3.12.2"
│ gyp info find Python using Python version 3.12.2 found at "/Library/Frameworks/Python.framework/Versions/3.12/bin/python3"
│ gyp verb get node dir no --target version specified, falling back to host node version: 18.16.0
│ gyp verb command install [ '18.16.0' ]
│ gyp verb install input version string "18.16.0"
│ gyp verb install installing version: 18.16.0
│ gyp verb install --ensure was passed, so won't reinstall if already installed
│ gyp verb install version is already installed, need to check "installVersion"
│ gyp verb got "installVersion" 11
│ gyp verb needs "installVersion" 9
│ gyp verb install version is good
│ gyp verb get node dir target node version installed: 18.16.0
│ gyp verb build dir attempting to create "build" dir: /Users/mik_a/Desktop/dev/ezerp/node_modules/.pnpm/node-sass@9.0.0/node_modules/node-sass/build
│ gyp verb build dir "build" dir needed to be created? Yes
│ gyp verb build/config.gypi creating config file
│ gyp verb build/config.gypi writing out config file: /Users/mik_a/Desktop/dev/ezerp/node_modules/.pnpm/node-sass@9.0.0/node_modules/node-sass/build/config.gypi
│ gyp verb config.gypi checking for gypi file: /Users/mik_a/Desktop/dev/ezerp/node_modules/.pnpm/node-sass@9.0.0/node_modules/node-sass/config.gypi
│ gyp verb common.gypi checking for gypi file: /Users/mik_a/Desktop/dev/ezerp/node_modules/.pnpm/node-sass@9.0.0/node_modules/node-sass/common.gypi
│ gyp verb gyp gyp format was not specified; forcing "make"
│ gyp info spawn /Library/Frameworks/Python.framework/Versions/3.12/bin/python3
│ gyp info spawn args [
│ gyp info spawn args   '/Users/mik_a/Desktop/dev/ezerp/node_modules/.pnpm/node-gyp@8.4.1/node_modules/node-gyp/gyp/gyp_main.py',
│ gyp info spawn args   'binding.gyp',
│ gyp info spawn args   '-f',
│ gyp info spawn args   'make',
│ gyp info spawn args   '-I',
│ gyp info spawn args   '/Users/mik_a/Desktop/dev/ezerp/node_modules/.pnpm/node-sass@9.0.0/node_modules/node-sass/build/config.gypi',
│ gyp info spawn args   '-I',
│ gyp info spawn args   '/Users/mik_a/Desktop/dev/ezerp/node_modules/.pnpm/node-gyp@8.4.1/node_modules/node-gyp/addon.gypi',
│ gyp info spawn args   '-I',
│ gyp info spawn args   '/Users/mik_a/Library/Caches/node-gyp/18.16.0/include/node/common.gypi',
│ gyp info spawn args   '-Dlibrary=shared_library',
│ gyp info spawn args   '-Dvisibility=default',
│ gyp info spawn args   '-Dnode_root_dir=/Users/mik_a/Library/Caches/node-gyp/18.16.0',
│ gyp info spawn args   '-Dnode_gyp_dir=/Users/mik_a/Desktop/dev/ezerp/node_modules/.pnpm/node-gyp@8.4.1/node_modules/node-gyp',
│ gyp info spawn args   '-Dnode_lib_file=/Users/mik_a/Library/Caches/node-gyp/18.16.0/<(target_arch)/node.lib',
│ gyp info spawn args   '-Dmodule_root_dir=/Users/mik_a/Desktop/dev/ezerp/node_modules/.pnpm/node-sass@9.0.0/node_modules/node-sass',
│ gyp info spawn args   '-Dnode_engine=v8',
│ gyp info spawn args   '--depth=.',
│ gyp info spawn args   '--no-parallel',
│ gyp info spawn args   '--generator-output',
│ gyp info spawn args   'build',
│ gyp info spawn args   '-Goutput_dir=.'
│ gyp info spawn args ]
│ Traceback (most recent call last):
│   File "/Users/mik_a/Desktop/dev/ezerp/node_modules/.pnpm/node-gyp@8.4.1/node_modules/node-gyp/gyp/gyp_main.py", line 42, in <module>
│     import gyp  # noqa: E402
│     ^^^^^^^^^^
│   File "/Users/mik_a/Desktop/dev/ezerp/node_modules/.pnpm/node-gyp@8.4.1/node_modules/node-gyp/gyp/pylib/gyp/__init__.py", line 9, in <module>
│     import gyp.input
│   File "/Users/mik_a/Desktop/dev/ezerp/node_modules/.pnpm/node-gyp@8.4.1/node_modules/node-gyp/gyp/pylib/gyp/input.py", line 19, in <module>
│     from distutils.version import StrictVersion
│ ModuleNotFoundError: No module named 'distutils'
│ gyp ERR! configure error 
│ gyp ERR! stack Error: `gyp` failed with exit code: 1
│ gyp ERR! stack     at ChildProcess.onCpExit (/Users/mik_a/Desktop/dev/ezerp/node_modules/.pnpm/node-gyp@8.4.1/node_modules/node-gyp/lib/configure.js:259:16)
│ gyp ERR! stack     at ChildProcess.emit (node:events:513:28)
│ gyp ERR! stack     at ChildProcess._handle.onexit (node:internal/child_process:291:12)
│ gyp ERR! System Darwin 22.4.0
│ gyp ERR! command "/usr/local/bin/node" "/Users/mik_a/Desktop/dev/ezerp/node_modules/.pnpm/node-gyp@8.4.1/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_li…
│ gyp ERR! cwd /Users/mik_a/Desktop/dev/ezerp/node_modules/.pnpm/node-sass@9.0.0/node_modules/node-sass
│ gyp ERR! node -v v18.16.0
│ gyp ERR! node-gyp -v v8.4.1
│ gyp ERR! not ok 
│ Build failed with error code: 1
└─ Failed in 366ms at /Users/mik_a/Desktop/dev/ezerp/node_modules/.pnpm/node-sass@9.0.0/node_modules/node-sass
 ELIFECYCLE  Command failed with exit code 1.
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

 

 

node-gyp 에서 python 으로 뭔가를 하는가보다.

거기서 distutils 라는 모듈이 없다고 떴다.

 

검색해보니 setuptools 패키지를 업그레이드 하라고 해서 해줬다.

python3 -m pip install --upgrade setuptools

 

 

이후엔 설치가 잘 됐다.

pytorch 를 사용하는데 세팅을 자주 하는게 아니다 보니 매번 까먹어서 기록할려는 글.

windows용 도커도 조만간 만들어야겠다.

 

1. cuda 설치

 

https://developer.nvidia.com/cuda-11-7-0-download-archive?target_os=Windows&target_arch=x86_64&target_version=10 

 

CUDA Toolkit 11.7 Downloads

Resources CUDA Documentation/Release NotesMacOS Tools Training Sample Code Forums Archive of Previous CUDA Releases FAQ Open Source PackagesSubmit a BugTarball and Zip Archive Deliverables

developer.nvidia.com

현재까진 pytorch 가 cuda 11.7 버전까지 지원하는 듯 하여 최신버전인 12.0 대신 11.7 버전을 설치했다.

 

2. cuDNN 설치 (로그인 필요)

 

https://developer.nvidia.com/rdp/cudnn-archive

 

cuDNN Archive

Download releases from the GPU-accelerated primitive library for deep neural networks.

developer.nvidia.com

 

cuDNN 설치.11.x 버전을 설치하면 된다

설치된 파일을 cuda 설치한 폴더로 옮긴다

 

3. Pytorch 설치

pytorch가 설치되어있다면 pytorch 버전 먼저 확인한다

import torch
print(torch.__version__)
# 1.13.0+cpu

print(torch.cuda.is_available())
# False

보니깐 cpu 버전으로 설치되어 있더라... 그래서 cuda 사용이 불가능 했었다.

일단 uninstall 해주고,

 

pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117

 

해당 커맨드로 11.7 버전용 pytorch 를 설치해줬다.

 

import torch
print(torch.__version__)
# 1.13.0+cu117

print(torch.cuda.is_available())
# True

그 다음 버전을 확인하니 cuda 버전으로 뜬다.

 

python 을 실행할 때 argument 를 줘서 실행해보려고한다.

 

전체코드

#app.py

import argparse

# python app.py -h 를 치면 나오는 메세지
parser = argparse.ArgumentParser(description="-h Help message")

parser.add_argument('--arg1', required=True)
parser.add_argument('--arg2', required=False)
args = parser.parse_args()
arg1 = args.arg1
arg2 = args.arg2

print(arg1,arg2)

 

실행

$ python app.py --arg1 Hello
Hello None
$ python app.py --arg1 Hello --arg2 World
Hello World

 

 

parser.add_argument('--arg1', required=True)

required 를 True 로 주면 실행할 때 값을 안주면 에러를 출력한다.

False 로 주고 값을 안주면 None

 

parser.add_argument('--arg2', required=False, default='World', help='help msg')

default 값을 줄수도, 각 argument 마다 도움메세지를 지정해줄수도 있다.

git 을 사용하다보면 임시, 빌드파일 등등 git에 추가하고 싶지 않은 파일을 gitignore 에 추가해서 사용한다.

이런 파일들을 정리 해서 .gitignore 파일로 추출해주는 사이트

 

https://www.gitignore.io/

 

gitignore.io

Create useful .gitignore files for your project

www.gitignore.io

 

 

python 프로젝트의 gitignore 파일을 만들어보자

 

python

python을 입력하고 생성,

 

 

 

그럼 사이트가 이동된다. 여기서 Ctrl + S 을 눌러 저장하는 창이 뜨면,

프로젝트 폴더에 .gitignore 파일명으로 저장하자.

Ctrl + A 를 눌러 전체선택하고 기존에 존재하던 .gitignore 파일에 붙여써도 되구..

ubuntu docker 에서 mongodb container 를 설치하고 python에서 pymongo로 db를 조금 만져보려고 한다.

 

Ubuntu => Docker

 

$ docker run -d --name mongodb -p 27017:27017 mongo

위 명령어를 실행하면

-d 백그라운드에서 동작하는

--name mongodb mongodb 라는 이름을 가지고

-p 27017:27017  컨테이너 내부외부를 27017 포트로 통신하는 (mongodb의 기본 포트이다) 

mongo container 를 실행한다.

 

만약 mongo image 가 없으면 자동으로 다운(pull) 받는다.

 

 

$ docker ps

위 명령어로 컨테이너가 제대로 실행됐나 확인해본다

mongo 이미지로 mongodb 라는 이름을 가진 컨테이너가 실행돼있다.

docker ps

 

 

웹브라우저에서 localhost:27017 로 접속해보자. 

localhost:27017

이렇게 뜨면 제대로 실행중이다.

 

 

 

 

Python 

이제 python 에서 mongodb 를 사용해보자.

 

$ pip install pymongo

mongodb 사용을 위해 pip로 pymongo 를 설치하고 코드를 작성하자

 

#db.py

from pymongo import MongoClient

client = MongoClient('mongodb://localhost:27017/')


db = client.newDB 			# db 를 하나 만들고
userCollection = db.user	# db 에서 collection 을 만든다.

# insert_one() 으로 db 를 추가
userCollection.insert_one({
    'name' : 'mik_a',
    'age'  : '100',
})

# find() 로 collection 에 저장된 데이터를 불러와서 출력한다
for i in userCollection.find() :
    print(i)

# collection 의 데이터를 전부 삭제한다.
userCollection.delete_many({})

 

출력

 

NoSQL DB인 mongodb 를 python 으로 간단하게 사용해봤다.

+ Recent posts