[개발이야기#030] 내가 해보고 싶은 것 - 엑셀파일을 이용해서 다중 이체 해보기 - 리눅스 개발 소스 수정

in #kr6 days ago

[postingcuration]

안녕하세요 가야태자 @talkit 입니다.

관련글

https://steemit.com/kr/@talkit/026-postingcuration

[개발이야기#027] 내가 해보고 싶은 것 - 엑셀파일을 이용해서 다중 이체 해보기 - 리눅스 개발 환경 수정 — Steemit

위 두글의 수정글 입니다.

음 윈도우즈에서는 잘 됩니다. T.T

리눅스 오류

그런데 리눅스에서는 제가 만들어 드렸던 소스코드가 오류가 납니다.

(steemit) user@user-VirtualBox:~/steemit$ python send_steem_users_from_excel.py
Traceback (most recent call last):
  File "/home/user/steemit/send_steem_users_from_excel.py", line 45, in <module>
    send_steem_from_excel(excel_path, username, private_key)
  File "/home/user/steemit/send_steem_users_from_excel.py", line 21, in send_steem_from_excel
    tb = TransactionBuilder()
         ^^^^^^^^^^^^^^^^^^^^
  File "/home/user/anaconda3/envs/steemit/lib/python3.12/site-packages/steem/transactionbuilder.py", line 29, in __init__
    self.steemd = steemd_instance or shared_steemd_instance()
                                     ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/user/anaconda3/envs/steemit/lib/python3.12/site-packages/steem/instance.py", line 25, in shared_steemd_instance
    _shared_steemd_instance = stm.Steemd(
                              ^^^^^^^^^^

실행하면 위와 같은 오류가 발생 합니다.

개발 환경은 앞에 글에 있는 개발 환경 그대로 아래서 다시 설명 드리고 중요한건 소스코드를 변경 해야 합니다.

리눅스에서 호환되는 소스 코드

import pandas as pd
from steem import Steem
from steem.transactionbuilder import TransactionBuilder
from steembase import operations

def send_steem_from_excel(file_path, steem_username, steem_private_key):
    # 엑셀 파일 로드
    df = pd.read_excel(file_path)

    # 실제 Steem 네트워크용 Steem 인스턴스 생성
    client = Steem(nodes=["https://api.steemit.com"], keys=[steem_private_key])

    # 각 행에 대하여 스팀 전송
    for index, row in df.iterrows():
        account = row['계정명']
        amount = row['전송금액']
        memo = row['메모']
        amount_str = f"{amount:.3f} STEEM"  # 3자리 소수로 금액 포맷
        
        # 수신자 계정 존재 확인
        if client.get_account(account):
            # Transaction 생성 및 전송
            client.transfer(account, float(amount), 'STEEM', memo=memo, account=steem_username)
            print(f"Transferred {amount_str} STEEM to {account} with memo: {memo}")
        else:
            print(f"Invalid recipient: {account}")

if __name__ == '__main__':
    # 스팀 계정과 개인 액티브 키 설정
    username = 'your_steem_username'
    private_key = 'your_private_active_key'
    
    # 엑셀 파일 경로
    excel_path = '스팀전송내역.xlsx'
    
    # 함수 실행
    send_steem_from_excel(excel_path, username, private_key)

소스 코드를 위와 같이 변경 하시면 됩니다.

소스 코드는 원래 ChatGPT가 만들어준 코드로 이용을 했었습니다.

이번에는 devportal-tutorials-py/tutorials/21_transfer_steem_and_sbd/index.py at master · steemit/devportal-tutorials-py (github.com) 이페이지를 참조하여 공식문서가 권하는대로 수정해 보았습니다.

저는 윈도우즈에서도 리눅스에서도 잘 동작 했습니다.

아래 내용은 이전글 안보셔도 되도록 그대로 두었습니다. ^^

엑셀파일 준비

계정명전송금액메모
talkit1프로그램 만들어 주셔서 감사합니다.

설치 패키지

우분투 리눅스

sudo apt install build-essential git wget cmake

RHEL 계열 리눅스 / RHEL, CentOS, Rocky Linux, etc

sudo dnf groupinstall "Development Tools" -y
sudo dnf install -y epel-release
sudo dnf install -y wget curl git vim

리눅스 계열에서는 위와 같이 설치 하시면 됩니다.

파이썬 환경 준비하기

아나콘다 설치 및 아나 콘다 환경 설정

https://steemit.com/blog/@talkit/015-linux-anaconda-python
위 글을 참조하시면 됩니다.

위 글에 나와 있는대로 하셨으면

conda create -n steemit python=3.12
conda activate steemit

파이썬 라이버러리 설치

pip install pandas openpyxl steem
pip install pycryptodome

프로그램 구동

(steemit) user@user-VirtualBox:~$

리눅스 상에 위아 같은 프롬프트 상태일때

mkdir steemit
cd steemit

steemit 폴더를 만들고 위 폴더에 들어가서

vi send_steem_users_from_excel2.py

또는

nano send_steem_users_from_excel2.py
gedit send_steem_users_from_excel2.py

리눅스에서 편안한 편집기로 ^^ 전체소스를 복사하셔서 저장 합니다.

프로그램 실행

python send_steem_users_from_excel2.py

위와 같이 실행하시면 됩니다.

음 여기서 조금 걱정 되는 것은 꺼꾸로 리눅스에서 엑셀을 어떻게 준비할 것인가네요

엑셀파일은 윈도우즈나 맥에서 만들어서 업로드 한다(?)
오픈오피스를 설치하고, xlsx로 저장한다

정도가 되겠습니다.

감사합니다.



Posted through the ECblog app (https://blog.etain.club)

Sort:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

오~ 역쒸~!!!
개발에 관련해서는 모르는게 없으신 것 같아요!
알려주신 수정된 소스 파일을 이용해서 다시 해보겠습니다~ ^^
고맙습니다~! ^^

적용 해보셨나요?
감사합니다.