python에서 dotenv를 설치하려고 하니 이런 오류가 뜬다.
error: subprocess-exited-with-error
× python setup.py egg_info did not run successfully.
│ exit code: 1
╰─> [73 lines of output]
"""
파일 경로와 오류 이야기
"""
note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed
× Encountered error while generating package metadata.
╰─> See above for output.
note: This is an issue with the package mentioned above, not pip.
hint: See above for details.
내가 알아들은 것으론
1) pip
자체의 오류는 아니다.
2) python setup.py egg_info
가 잘 돌아가지 않는다.
이 정도 였다.
이걸 기반으로 문제를 해결해보자.
pip
자체의 문제는 아니라고 했지만 혹시 모르니 설치에 필요한 pip
이랑 setuptools
를 모두 업그레이드 시켜보자.
# 둘 모두 똑같은 효과다.
python.exe -m pip install --upgrade pip
python -m pip install --upgrade pip
업그레이드 시키고 다시 설치했는데 여전히 안된다.
pip tool 자체의 문제는 아닌걸로.
fork 해온 파일이 구동 안되는 게 문제니, fork 파일의 requirements.txt
에 있는 걸 하나씩 다 설치해보자.
# 패키지 설치하기
>>>python -m pip install <설치할 모듈>
이렇게 요구하는 걸 다 설치했더니, 서버는 돌아간다
문제는, 서버가 돌아가기만 하고 제대로 작동이 안되는지 오류가 엄청 뜸...
it doesn't exist.
dotenv.read_dotenv()
오류 메세지를 보고 뭐가 문제인가 봤더니, dotenv.read_dotenv()
가 존재하지 않는다고 한다.
오류를 타고 들어가보니, manage.py
파일 안에 있는 코드가 문제였다.
if __name__ == '__main__':
dotenv.read_dotenv()
main()
여기서 dotenv.read_dotenv()
함수는 .env
라는 파일을 불러오는 건데, manage.py
가 위치한 파일과 같은 위치에 .env
라는 파일이 있어야 함수가 제대로 작동된다.
파일을 만들어주자.
만든 뒤에 파일 안에 SECRET KEY를 설정해줘야 한다.
SECRET_KEY=<시크릿 키>
시크릿키는 함수로 생성받는 방법도 있으나, 나는 https://djecrety.ir/ 에서 시크릿키를 받아 넣고 있다.
추가로, .env
에는 github에 올릴 때 숨기고 싶은 부분을 넣어서 할당시켜주면 된다.
값을 불러오는 코드는 아래와 같다.
os.environ.get('가져올 변수 이름')
이런식으로 하면 서버가 잘 굴러간다 !!
아 참, 항상 django로 fork 해올 땐 makemigrations
와 migrate
를 해줘야 db 적용이 제대로 된다.
대문자와 소문자를 판별하기 위한 메소드
문자열을 대문자로 변경해주는 메소드.
word = 'imhappy'
word = word.upper()
print(word)
>>>IMHAPPY
문자열을 소문자로 변경해주는 메소드.
word = 'AREYOUHAPPY'
word = word.lower()
print(word)
>>>areyouhappy
문자열이 대문자라면 True를 반환
word1 = 'abcd'
word2 = 'ABCD'
# abcd
print(word1.isupper())
# ABCD
print(word2.isupper())
>>>False
True
문자열이 소문자라면 True를 반환
word1 = 'abcd'
word2 = 'ABCD'
# abcd
print(word1.islower())
# ABCD
print(word2.islower())
>>>True
False
for문을 돌려주면 된다.
# 원본 문자열과 바꿀 빈 문자열
word = 'IMhappy'
answer = ''
for i in word:
# 대문자일 경우
if i.isupper() == True:
# 소문자로 변환
answer += i.lower()
# 소문자일 경우
else:
# 대문자로 변환
answer += i.upper()
print(answer)
>>>imHAPPY
word = 'happy'
# str을 list로 변환 : list('문자열') or list(변수 이름)
my_list = list(word)
print(my_list)
>>>['h', 'a', 'p', 'p', 'y']
my_list = ['h', 'a', 'p', 'p', 'y']
# .join([리스트]) or .join(변수 이름)
# .join 앞에는 리스트 요소를 하나로 합치면서 사이에 뭘 넣을지 써주기
# '' < 공백
word = ''.join(my_list)
print(word)
>>>happy
영어 대소문자로 이루어진 문자열 my_string이 매개변수로 주어질 때,
my_string을 모두 소문자로 바꾸고 알파벳 순서대로 정렬한 문자열을 return 하도록 solution 함수를 완성해보자!
def solution(my_string):
word = ''
for string in my_string:
if string.isupper() == True:
string = string.lower()
word += string
return ''.join(sorted(word))
문자열을 하나씩 for문으로 돌려서
대문자인지 점검한 뒤 소문자로 바꾸어주고,
그걸 sorted로 정렬한 뒤
빈 문자열에 join 시켜줬다.
def solution(my_string):
return ''.join(sorted(my_string.lower()))
헐...
for문 돌릴 필요 없이 문자열 전체를 그냥 lower
해주면 되는구나.
새로운 깨달음을 얻었다.