PyInstaller is tested against Windows, Mac OS X, and Linux. However, it is not a cross-compiler: to make a Windows app you run PyInstaller in Windows; to make a Linux app you run it in Linux, etc. PyInstaller has been used successfully with AIX, Solaris, and FreeBSD, but is not tested against them.
according to the comments in that answer it appears the ability to cross-compile was removed in 1.5, which was many releases ago. However, the secondary answer mentioning wine is correct -- you can usually create working Windows executables if you run pyinstaller under wine.
And as @xoviat mentioned, pyinstaller is cross-platform -- the compilation program works on Linux, OSX, and Windows. However, the resulting executables are platform specific.
한마디로 cross-compiler 가 아니라 불가능하다는 것이다. Wine 을 쓰는걸 추천한고 한다.
그리고, pyinstaller 는 사용자의 OS 환경에 맞게 실행파일을 만들어준다. linux 에서 배포를 했으면 조금은 달라졌을까?
ChatGPT 의 API 를 연결하려면 우선 로그인을 해야한다. 로그인을 하고 나서 Documentation 탭에 들어간다. API Reference 항목에서 Authentication 항목을 클릭하면 글 내용 중 볼드 처리된 API Keys 가 보이는데 이를 클릭하면 API Key 를 생성할 수 있다.
키가 발급되고 나면 팝업창이 뜨는데 전체 키를 보여주며 닫으면 다시 볼 수 없으니 복사를 잘 해놓자.
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": "\\n\\nHello there, how may I assist you today?",
},
"finish_reason": "stop"
}],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 12,
"total_tokens": 21
}
}
Request Body 를 더 자세피 살펴보면
model(Required) : api 에 사용되는 모델
message(Required) : 전송할 메시지
temperature : 0~2 값을 입력. 더 높은 값일 수록 랜덤한 대답이 생성
top_p : temperature를 대체할 변수. 따라서 동시에 사용하지말자.
n : 각 입력 메시지에 대해 생성할 대화 완료 선택사항 수. 기본값은 1
stream : 생성되는 대답의 부분이 출력. 대답이 끊어서 전달된다.
response = openai.ChatCompletion.create(
model='gpt-3.5-turbo',
messages=[
{'role': 'user', 'content': 'Count to 100, with a comma between each number and no newlines. E.g., 1, 2, 3, ...'}
],
temperature=0,
stream=True # again, we set stream=True
)
위의 request 를 보내고
for chunk in response:
chunk_time = time.time() - start_time # calculate the time delay of the chunk
collected_chunks.append(chunk) # save the event response
chunk_message = chunk['choices'][0]['delta'] # extract the message
collected_messages.append(chunk_message) # save the message
print(f"Message received {chunk_time:.2f} seconds after request: {chunk_message}")
다음과 같이 response 를 확인한다면
Message received 0.10 seconds after request: {
"role": "assistant"
}
Message received 0.10 seconds after request: {
"content": "\\n\\n"
}
Message received 0.10 seconds after request: {
"content": "1"
}
Message received 0.11 seconds after request: {
"content": ","
}
Message received 0.12 seconds after request: {
"content": " "
}
Message received 0.13 seconds after request: {
"content": "2"
}
...
Message received 0.13 seconds after request: {
"content": "100"
}
과 같은 출력을 할 수 있다.
stop : API가 추가 토큰 생성을 중지하는 최대 4개의 시퀀스.
max_tokens : 한번의 대답이 생성되기 위한 최대 토큰의 개수
presense_penalty : -2~2 사이의 숫자이며, 양수로 갈 수록 새로운 토큰이 지금까지 텍스트에 나타나는지 여부에 따라 대답을 다르게 한다.
frequency_penalty : -2~2 사이의 숫자이며, 양수로 갈수록 빈도를 기준으로 새로운 토큰에 페널티를 줘 동일한 행 생성을 막는다.
logit_bias : -100~100 사이의 값에 매핑한 json 개체를 이용해 지정된 값에 따른 토큰이 나타날 가능서을 수정한다.
user : user 를 입력해 openai 에서 로그를 수집해 피드백을 줄 수 있게 허가해준다.npm install openaiapi.js 파일을 만들어 다음과 같이 입력한다.위의 코드를 실행하면 다음과 같은 response를 받을 수 있다.Request Body 를 더 자세피 살펴보면
model : api 에 사용되는 모델
message : 전송할 메시지
temperature : 0~2 값을 입력. 더 높은 값일 수록 랜덤한 대답이 생성
top_p : temperature를 대체할 변수. 따라서 동시에 사용하지말자.
n : 각 입력 메시지에 대해 생성할 대화 완료 선택사항 수. 기본값은 1
stream : 생성되는 대답의 부분이 출력. 대답이 끊어서 전달된다.
response = openai.ChatCompletion.create(
model='gpt-3.5-turbo',
messages=[
{'role': 'user', 'content': 'Count to 100, with a comma between each number and no newlines. E.g., 1, 2, 3, ...'}
],
temperature=0,
stream=True # again, we set stream=True
)
위의 request 를 보내고다음과 같이 response 를 확인한다면과 같은 출력을 할 수 있다.
stop : API가 추가 토큰 생성을 중지하는 최대 4개의 시퀀스.
max_tokens : 한번의 대답이 생성되기 위한 최대 토큰의 개수
presense_penalty : -2~2 사이의 숫자이며, 양수로 갈 수록 새로운 토큰이 지금까지 텍스트에 나타나는지 여부에 따라 대답을 다르게 한다.
frequency_penalty : -2~2 사이의 숫자이며, 양수로 갈수록 빈도를 기준으로 새로운 토큰에 페널티를 줘 동일한 행 생성을 막는다.
logit_bias : -100~100 사이의 값에 매핑한 json 개체를 이용해 지정된 값에 따른 토큰이 나타날 가능서을 수정한다.
user : user 를 입력해 openai 에서 로그를 수집해 피드백을 줄 수 있게 허가해준다.
Message received 0.10 seconds after request: { "role": "assistant" }
Message received 0.10 seconds after request: { "content": "\\n\\n" }
Message received 0.10 seconds after request: { "content": "1" }
Message received 0.11 seconds after request: { "content": "," }
Message received 0.12 seconds after request: { "content": " " }
Message received 0.13 seconds after request: { "content": "2" }
...
Message received 0.13 seconds after request: { "content": "100" }