반응형

PowerShell에서 Python Poetry 설치 및 PyPI 배포 가이드

작성일: 2025-04-29


📌 개요

이 글은 Windows 환경에서 PowerShell을 사용하여 Python의 패키지 관리 도구인 Poetry를 설치하고, 이를 활용해 PyPI에 패키지를 배포하는 과정을 자세히 안내합니다. 또한, 설치 후 생성되는 폴더인 pypoetry의 의미도 함께 설명합니다.


1. Poetry란?

Poetry는 Python의 패키지 및 의존성 관리, 빌드, 배포 등을 현대적으로 통합 관리할 수 있게 해주는 도구입니다. setup.py, requirements.txt, virtualenv, twine 등의 기능을 하나로 통합해 줍니다.

주요 기능

  • 프로젝트 생성 및 관리
  • 의존성 자동 설치 및 잠금(lock)
  • 가상환경 자동 생성
  • PyPI 배포 지원

2. PowerShell에서 Poetry 설치 방법

1️⃣ Python 설치 확인

python --version

없다면 https://www.python.org/downloads/windows/ 에서 설치하고, "Add Python to PATH" 옵션을 체크하세요.

2️⃣ Poetry 설치

(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python -

3️⃣ 환경 변수 설정

poetry 명령이 인식되지 않는다면 다음 경로를 환경 변수에 추가합니다:

%USERPROFILE%\AppData\Roaming\Python\Scripts\

4️⃣ 설치 확인

poetry --version

3. Poetry를 사용한 PyPI 배포

1️⃣ 프로젝트 생성

poetry new my_package
cd my_package

2️⃣ pyproject.toml 설정 예시

[tool.poetry]
name = "my-package"
version = "0.1.0"
description = "A simple example package"
authors = ["홍길동 <hong@example.com>"]

[tool.poetry.dependencies]
python = "^3.8"

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

3️⃣ 패키지 빌드

poetry build

4️⃣ PyPI 토큰 설정 및 배포

poetry config pypi-token.pypi your_token_here
poetry publish --build

TestPyPI를 사용할 경우:

poetry config repositories.test-pypi https://test.pypi.org/legacy/
poetry publish --build -r test-pypi

4. C:\Users\<사용자>\AppData\Roaming\pypoetry 폴더란?

Poetry 설치 후 생성되는 pypoetry 폴더는 사용자 설정, 캐시, 가상환경, 인증 정보 등을 저장하는 디렉토리입니다.

주요 구성

파일/폴더 설명
auth.toml PyPI 인증 토큰 저장
config.toml 사용자 환경 설정 (가상환경 등)
virtualenvs/ 생성된 가상환경 목록
plugins/ Poetry 플러그인 저장 위치
cache/ 패키지 캐시

삭제하면 초기화되지만, 문제가 없으면 그대로 두는 것이 좋습니다.


✅ 요약

항목 설명
Poetry 역할 Python 의존성, 빌드, 배포 통합 도구
설치 명령 PowerShell에서 Invoke-WebRequest 명령 사용
배포 대상 PyPI 또는 TestPyPI
pypoetry 폴더 설정 및 사용자 데이터 저장 경로

📎 참고 링크

반응형
반응형

🔧 VS Code에서 Poetry 가상환경 제대로 연동하는 방법 (pyenv + launch.json 설정 포함)

Python 프로젝트를 관리할 때 Poetry는 더 이상 선택이 아닌 필수가 되어가고 있습니다. 하지만 VS Code와 Poetry를 연동할 때 인터프리터 감지가 안 되거나, 실행이 안 되는 불편함을 겪은 분들이 많을 거예요.

이 글에서는 pyenv + Poetry를 사용하는 프로젝트를 VS Code에서 완벽하게 연동하는 방법을 정리합니다. 특히 launch.json을 통해 디버깅까지 깔끔하게 설정하는 법도 다룹니다.


1️⃣ Poetry 가상환경 기본 구조 이해하기

Poetry는 기본적으로 가상환경을 아래 위치에 생성합니다:

# 프로젝트 외부 경로 (기본 설정)
C:\Users\<사용자>\AppData\Local\pypoetry\Cache\virtualenvs\<project-name>-<hash>

이로 인해 VS Code는 인터프리터를 자동으로 인식하지 못하는 경우가 많습니다.


2️⃣ Poetry 가상환경을 VS Code에서 인식시키는 방법

✅ 방법 1: 가상환경을 프로젝트 내부 .venv/에 생성 (강력 추천)

poetry config virtualenvs.in-project true
poetry env remove python      # (기존 가상환경 제거)
poetry install                # 가상환경 재생성 (.venv 생성됨)

이후 VS Code를 열면 .venv/Scripts/python.exe가 자동으로 감지됩니다.

✅ 방법 2: 수동으로 인터프리터 지정

  1. 터미널에서 가상환경 경로 확인:
poetry env info --path
  1. VS Code에서 Ctrl+Shift+PPython: Select Interpreter
  2. 위 경로의 Scripts/python.exe 선택

✅ 방법 3: .vscode/settings.json 직접 작성

{
  "python.defaultInterpreterPath": "C:\\Users\\flami\\AppData\\Local\\pypoetry\\Cache\\virtualenvs\\ice-breaker-xxxx\\Scripts\\python.exe"
}

3️⃣ launch.json으로 Poetry 가상환경에서 .py 자동 실행

VS Code의 launch.json을 설정하면 F5만 눌러도 poetry 가상환경에서 스크립트를 실행할 수 있습니다.

📁 예시 구조

ice_breaker/
├── main.py
└── .vscode/
    └── launch.json

📄 launch.json 예시

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Poetry Run: main.py",
      "type": "python",
      "request": "launch",
      "program": "${workspaceFolder}/main.py",
      "console": "integratedTerminal",
      "args": ["--debug"],

      "python": "C:\\Users\\flami\\AppData\\Local\\pypoetry\\Cache\\virtualenvs\\ice-breaker-xxxx\\Scripts\\python.exe"
    }
  ]
}

4️⃣ Poetry 환경 진입 여부 확인하는 방법

Poetry 가상환경에 들어와 있는지 확인하려면 다음 명령들을 활용하세요:

poetry env info --path
poetry env info
where python

또는 Python에서:

import sys
print(sys.prefix)

✅ 마무리 체크리스트

작업 명령
프로젝트 내부에 .venv 생성 poetry config virtualenvs.in-project true
가상환경 활성화 poetry shell 또는 activate.ps1
인터프리터 경로 확인 poetry env info --path
VS Code에 설정 launch.json or settings.json
디버깅 설정 F5 → launch.json 자동 실행 가능

✨ 마치며

Poetry와 VS Code를 연동하면 패키지 관리 + 실행 + 디버깅까지 깔끔하게 통합됩니다.
이번 글의 설정대로만 따라 하면, 더 이상 “왜 VS Code에서 가상환경이 안 잡혀요?” 같은 고민은 끝입니다.

반응형
반응형

중첩 함수하나의 함수 내에서 다른 함수를 정의하는 것을 말합니다.  중첩 함수는 해당 부모 함수 내부에서만 유효하며 외부에서 직접 접근할 수 없습니다. 중첩 함수는 주로 부모 함수 내에서만 필요한 보조 작업을 수행하기 위해 사용됩니다.

def outer_function():
    def inner_function():
        return "This is inner function."
    
    return inner_function()

# outer_function을 호출하여 중첩된 inner_function을 실행합니다.
result = outer_function()
print(result)  # 출력: This is inner function.

 

위의 예시에서 inner_function은 outer_function 내에서만 정의되었습니다. 이는 outer_function 외부에서는 직접적으로 접근할 수 없음을 의미합니다.

 

반응형
반응형

일급객체(first-class object)란 프로그래밍에서 아래에 나열된 특징을 가지는 모든 객체들을 가리킵니다. 

  • 모든 요소는 할당 명령문의 대상이 될 수 있습니다.
  • 모든 요소는 동일 (equal, ==) 비교의 대상이 될 수 있습니다.
  • 모든 요소는 함수의 파라미터가 될 수 있습니다. 
  • 모든 요소는 함수의 반환 값이 될 수 있습니다.

파이썬의 일급 객체는 다음과 같은 특징을 가지는 요소들이 있습니다.

  • 함수 (Function): 함수는 변수에 할당되거나 다른 함수의 인자로 전달될 수 있습니다.
  • 클래스 (Class): 클래스도 일급 객체로 간주됩니다. 
  • 메서드 (Method): 클래스 내부의 함수도 일급 객체로 취급됩니다.

다음은 함수를 일급 객체로 이용한 예제입니다. 

def add(n1, n2):
    return n1 + n2

def subtract(n1, n2):
    return n1 - n2

def multiply(n1, n2):
    return n1 * n2

def divide(n1, n2):
    return n1 / n2

## int/string/float 등과 같이 함수도 일급 객체로 활용

def calculate(calc_function, n1, n2):
    return calc_function(n1, n2)

result = calculate(add, 2, 3)
print(result)

 

 

반응형
반응형

파이썬 무제한 인자  이해하기

파이썬에서 무제한 인자를 사용하면 함수에 임의 개수의 인자를 전달할 수 있습니다. 이를 통해 함수를 더 유연하게 작성할 수 있습니다.

1. *args (Positional Arguments)

  •  *args는 임의 개수의 인자를 받아서 튜플(Tuple) 형태로 저장합니다.
  • 함수 내에서 *args를 사용하면 여러 개의 인자를 처리할 수 있습니다.
def print_args(*args):
    for arg in args:
        print(arg)

print_args(1, 2, 3)  # 출력: 1 2 3

 

2. **kwargs (Keyword Arguments)

  • **kwargs는 임의 개수의 키워드 인자를 받아서 딕셔너리(Dictionary) 형태로 저장합니다.
  • 함수 내에서 **kwargs를 사용하면 여러 개의 키워드 인자를 처리할 수 있습니다.  
def print_kwargs(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_kwargs(name="Alice", age=30)  # 출력: name: Alice, age: 30


 

반응형

'python' 카테고리의 다른 글

[python] 중첩 함수(nested function)  (0) 2024.04.09
[python] first-class object (일급 객체)  (0) 2024.04.09
[python] 데코레이터(decorator)  (0) 2024.04.07
python 자주 사용하는 문자열 함수  (0) 2024.04.02
Python Dictionary  (0) 2024.03.28
반응형

데코레이터란 데코레이터는 기존의 함수나 클래스를 수정하지 않고 그 기능을 확장하거나 변경하는 방법을 제공합니다. 이는 함수형 프로그래밍의 아이디어 중 하나로, 코드를 재사용하고 가독성을 향상시키는 데 도움이 됩니다.

데코레이터의 구조

데코레이터는 보통 함수로 정의되며, 다른 함수를 인수로 받아 처리한 후 그 함수를 반환합니다. 데코레이터를 사용하여 함수에 추가적인 기능을 덧붙일 수 있습니다.

 

def decorator_function(func):
    def wrapper():
        print("Before calling the function")
        func()
        print("After calling the function")
    return wrapper

@decorator_function
def say_hello():
    print("Hello, world!")

say_hello()

출력 :
Before calling the function
Hello, world!
After calling the function

 

위의 코드에서 decorator_function은 데코레이터 함수로, say_hello 함수를 인수로 받아 그 기능을 수정하고 있는 것을 볼 수 있습니다.

데코레이터의 장점

  1. 재사용성: 데코레이터를 사용하면 코드의 재사용성을 높일 수 있습니다. 동일한 기능을 여러 함수에 적용하려면 데코레이터를 각 함수에 적용하면 됩니다.
  2. 가독성: 데코레이터를 사용하면 함수의 핵심 기능과 추가 기능을 분리하여 코드를 더 읽기 쉽게 만듭니다.
  3. 유연성: 데코레이터를 사용하여 함수의 동작을 동적으로 변경할 수 있습니다. 이는 코드를 더 유연하고 확장 가능하게 만듭니다.

데코레이터의 활용

  • 로깅(logging)
  • 인증 및 권한 부여(authentication, authorization)
  • 성능 측정
  • 캐싱(caching)
  • 예외 처리
반응형

'python' 카테고리의 다른 글

[python] first-class object (일급 객체)  (0) 2024.04.09
python Unlimited Arguments(무제한 인자)  (0) 2024.04.08
python 자주 사용하는 문자열 함수  (0) 2024.04.02
Python Dictionary  (0) 2024.03.28
slice notation  (0) 2024.03.27
반응형

1.  len() : 문자열 길이 구하기 

str = "Life is good"
lenStr = len(str)  # 문자열 길이 구하기
print(lenStr)  # 출력: 12

 

2. find(),  index() : 문자열 특정 문자  인덱스 찾기

text = "Hello, World!"
print(text.find("World"))   # 출력: 7
print(text.index("World"))  # 출력: 7

3. upper(), lower() : 문자열 대/소문자 변환하기

text = "Hello, World!"
print(text.lower())  # 출력: hello, world!
print(text.upper())  # 출력: HELLO, WORLD!

4. strip(), lstrip(), rstrip() : 문자열 양쪽, 왼쪽, 오른쪽 공백 제거하기 

text = "   Hello, World!   "
print(text.strip())   # 출력: Hello, World!
print(text.lstrip())  # 출력: Hello, World!   
print(text.rstrip())  # 출력:    Hello, World!

 

5. split() : 문자열을 구분자를 기준으로 분할하여 리스트로 반환하기 

text = "apple, banana, cherry"
print(text.split(", "))  # 출력: ['apple', 'banana', 'cherry']

6. join() : 문자열 리스트를 지정된 구분자로 연결하기 

words = ['apple', 'banana', 'cherry']
print(", ".join(words))  # 출력: apple, banana, cherry

 

7. startswith(prefix), endswitch(suffix) : 문자열이 특정 접두사 혹은 접미사로 시작/끝나는지 확인하기

text = "Hello, World!"
print(text.startswith("Hello"))  # 출력: True
print(text.endswith("World!"))   # 출력: True

 

8. replace(old, new) : 문자열에서 지정된 문자 대체하기 

text = "Hello, World!"
new_text = text.replace("World", "Python")
print(new_text)  # 출력: Hello, Python!

 

반응형

'python' 카테고리의 다른 글

python Unlimited Arguments(무제한 인자)  (0) 2024.04.08
[python] 데코레이터(decorator)  (0) 2024.04.07
Python Dictionary  (0) 2024.03.28
slice notation  (0) 2024.03.27
Type Hints  (0) 2024.03.25
반응형

Git에서 "LF will be replaced by CRLF"와 같은 에러 메시지가 발생하는 경우, 이는 윈도우와 유닉스 기반 시스템 간의 줄 끝 문자 차이 때문입니다. 유닉스 시스템에서는 줄 끝이 LF (Line Feed)로 구성되지만, 윈도우에서는 줄 하나가 CR (Carriage Return)와 LF로 구성되는 CRLF로 이루어집니다.

이 문제를 해결하기 위해 Git에서는 core.autocrlf라는 기능을 제공합니다. 이 기능을 활성화하면 Git은 코드를 추가할 때 (예: 커밋) CRLF를 LF로 변환하고, 코드를 조회할 때 (예: 클론) LF를 CRLF로 변환합니다.

윈도우 사용자의 경우, 다음 명령어를 입력하여 이러한 변환을 항상 실행하도록 설정할 수 있습니다.

 

git config --global core.autocrlf true

 

만약 리눅스나 맥을 사용하고 있다면, 조회할 때 LF를 CRLF로 변환하는 것은 원하지 않을 수 있습니다. 
이 경우 다음과 같이 input 명령어를 추가하여 단방향으로만 변환이 이루어지도록 설정할 수 있습니다.

 

git config --global core.autocrlf true input

 

또는 변환 기능을 원하지 않고, 경고 메시지를 끄고 작업하고 싶은 경우 다음 명령어로 경고 메시지 기능인 core.safecrlf를 꺼줄 수 있습니다.

 

git config --global core.safecrlf false

 

이렇게 설정하면 Git에서 발생하는 CRLF 관련 에러를 해결할 수 있습니다.

반응형
반응형

파이썬은 데이터를 효율적으로 관리할 수 있는 다양한 자료구조를 제공합니다. 그 중에서도 딕셔너리(Dictionary)는 키(key)와 값(value)으로 이루어진 유연한 데이터 구조로, 파이썬 프로그래밍에서 빠질 수 없는 중요한 요소 중 하나입니다. 

파이썬 딕셔너리의 기초

파이썬 딕셔너리는 중괄호 {}를 사용하여 정의하며, 키와 값은 콜론(:)으로 구분하여 표현됩니다. 

my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'}

 

위의 예시에서 'name', 'age', 'city'는 키(key)이고, 'Alice', 30, 'New York'은 각각 해당하는 값(value)입니다. 딕셔너리는 키를 사용하여 값을 검색하고 수정할 수 있습니다.

딕셔너리의 활용

값 접근과 수정

딕셔너리에서 값에 접근하려면 대괄호 [ ] 안에 키를 넣어주면 됩니다.

print(my_dict['name'])  # 출력: Alice

 

키를 사용하여 값을 수정할 수도 있습니다

my_dict['age'] = 31
print(my_dict)  # 출력: {'name': 'Alice', 'age': 31, 'city': 'New York'}

새로운 키-값 쌍 추가

my_dict['gender'] = 'Female'
print(my_dict)  # 출력: {'name': 'Alice', 'age': 31, 'city': 'New York', 'gender': 'Female'}

 

새로운 키-값 쌍을 추가하려면 해당 키를 지정하고 값을 할당하면 됩니다

 

딕셔너리의 중첩

파이썬 딕셔너리는 중첩하여 사용할 수 있습니다. 다음은 중첩된 딕셔너리의 예시입니다

nested_dict = {
    'person1': {'name': 'Alice', 'age': 30},
    'person2': {'name': 'Bob', 'age': 25}
}

위의 예시에서는 'person1', 'person2'라는 키에 각각 다른 딕셔너리가 할당되어 있습니다.

심화: 복잡한 중첩 구조

더 복잡한 중첩 구조의 딕셔너리를 사용할 수도 있습니다. 

complex_dict = {
    'outer_dict': {
        'inner_dict_1': {
            'inner_list': [
                {'key1': 'value1'},
                {'key2': 'value2'}
            ]
        },
        'inner_dict_2': {
            'inner_list': [
                {'key3': 'value3'},
                {'key4': 'value4'}
            ]
        }
    }
}

 

위의 예시에서는 'outer_dict' 안에 두 개의 'inner_dict'가 있고, 각각의 'inner_dict' 안에는 리스트가 있으며, 리스트 안에는 또 다른 딕셔너리가 포함되어 있습니다.

중첩 구조의 출력 

# 중첩된 딕셔너리 값 출력 예시
print(complex_dict['outer_dict']['inner_dict_1']['inner_list'][0]['key1'])  # 출력: value1

결론

파이썬의 딕셔너리는 데이터를 효율적으로 관리하기 위한 강력한 도구입니다. 기초적인 사용법부터 복잡한 중첩 구조까지 다양한 형태로 활용할 수 있으며, 이를 통해 다양한 데이터를 효율적으로 다룰 수 있습니다. 딕셔너리의 활용은 파이썬 프로그래밍에서 중요한 부분이므로, 잘 익혀두는 것이 좋습니다.

이상으로 파이썬 딕셔너리에 대한 기초부터 심화까지의 내용을 다뤄보았습니다. 

반응형

'python' 카테고리의 다른 글

[python] 데코레이터(decorator)  (0) 2024.04.07
python 자주 사용하는 문자열 함수  (0) 2024.04.02
slice notation  (0) 2024.03.27
Type Hints  (0) 2024.03.25
Dictionary Comprehension  (0) 2024.03.23
반응형

환경 변수는 리눅스 시스템에서 프로세스가 동작하는 환경을 설정하는 데 사용되는 강력한 도구입니다.

환경 변수란?

환경 변수는 시스템 전체의 설정과 관련된 값들을 지정하는 데 사용됩니다. 각 환경 변수는 이름과 해당하는 값으로 구성되어 있으며, 시스템 전반적으로 사용됩니다. 프로세스는 이러한 변수들을 사용하여 자신의 동작을 결정합니다.

주요 환경 변수

  1. PATH: 명령어를 실행할 때 시스템이 검색하는 디렉토리 경로를 지정합니다.
  2. HOME: 사용자의 홈 디렉토리 경로를 지정합니다.
  3. LANG: 시스템의 기본 언어를 지정합니다.
  4. PWD: 현재 작업 디렉토리를 지정합니다.

환경 변수 설정 및 확인

환경 변수 설정: 

export MY_VAR="Hello, world!"

 

환경 변수 확인:

echo $MY_VAR

 

환경 변수 명령어 

  1. env 명령어:
    • env 명령어는 현재 세션에 정의된 환경 변수들을 화면에 출력합니다.
    • 예시:
      • env: 모든 환경 변수를 출력합니다.
      • env NAME=VALUE: NAME이라는 환경 변수에 VALUE 값을 지정합니다.
      • env -u NAME: NAME 환경 변수를 삭제합니다.
  2. set 명령어:
    • set 명령어는 Bash 쉘 변수를 관리하는데 사용됩니다.
    • 예시:
      • set NAME=VALUE: NAME이라는 쉘 변수를 설정합니다.
  3. export 명령어:
    • export 명령어는 환경 변수를 설정합니다.
    • 환경 변수는 운영체제 전반에 걸쳐 유지되는 값을 저장한 변수로, 여러 응용 프로그램에서 사용됩니다.
    • 예시:
      • export NAME=VALUE: NAME이라는 환경 변수를 설정합니다.

환경 변수의 활용

  • 시스템 설정: 언어 설정, 시스템 경로, 로그 파일 위치 등의 시스템 전반적인 설정에 사용됩니다.
  • 프로그램 실행: 프로그램이 필요로 하는 라이브러리 경로, 실행 옵션 등을 지정하는 데 사용됩니다.

환경 변수는 현재 쉘 환경에서만 유효하며, 영구적으로 설정하려면 사용자 프로필 파일에 해당 변수를 추가해야 합니다.

환경 변수는 리눅스 시스템에서 중요한 역할을 담당하며, 올바르게 활용함으로써 시스템 설정과 프로그램 실행을 보다 효율적으로 관리할 수 있습니다.

반응형

+ Recent posts