ptrstn / dailyblink

Downloads the Audio and Text of the Free Daily book from Blinkist.com
MIT License
43 stars 6 forks source link

Windows: IndexError: list index out of range #20

Closed kotzer3 closed 2 years ago

kotzer3 commented 2 years ago

i did delete my local dailyblink folder and pulled fresh version via pip install --user git+https://github.com/ptrstn/dailyblink under windows..

so under my dailyblink folder, i only get exceptions :/


Downloading the free daily Blinks...

Traceback (most recent call last):
  File "C:\Users\tbr\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Users\tbr\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "C:\Users\tbr\dailyblink\dailyblink\__main__.py", line 77, in <module>
    main()
  File "C:\Users\tbr\dailyblink\dailyblink\__main__.py", line 61, in main
    download_blinks(scraper, languages, base_path)
  File "C:\Users\tbr\dailyblink\dailyblink\utils.py", line 18, in download_blinks
    blink_info = get_daily_blink_info(scraper=scraper, language=language_code)
  File "C:\Users\tbr\dailyblink\dailyblink\core.py", line 39, in get_daily_blink_info
    return _create_blink_info(response.text)
  File "C:\Users\tbr\dailyblink\dailyblink\core.py", line 22, in _create_blink_info
    cover_url = soup.find_all("img", {"class": "book-cover__image"})[0]["src"]
IndexError: list index out of range

C:\Users\tbr\dailyblink>cd ..

C:\Users\tbr>del dailyblink
Möchten Sie "C:\Users\tbr\dailyblink\*" löschen (J/N)? j

C:\Users\tbr>pip install --user git+https://github.com/ptrstn/dailyblink
Collecting git+https://github.com/ptrstn/dailyblink
  Cloning https://github.com/ptrstn/dailyblink to c:\users\tbr\appdata\local\temp\pip-req-build-bagpta5e
  Running command git clone --filter=blob:none -q https://github.com/ptrstn/dailyblink 'C:\Users\tbr\AppData\Local\Temp\pip-req-build-bagpta5e'
  Resolved https://github.com/ptrstn/dailyblink to commit 16fe482552b101d83412bfbb662b8754682ba7d2
  Preparing metadata (setup.py) ... done
Requirement already satisfied: requests in c:\users\tbr\appdata\roaming\python\python39\site-packages (from dailyblink==1.0.0) (2.26.0)
Requirement already satisfied: beautifulsoup4 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from dailyblink==1.0.0) (4.10.0)
Requirement already satisfied: mutagen in c:\users\tbr\appdata\roaming\python\python39\site-packages (from dailyblink==1.0.0) (1.45.1)
Requirement already satisfied: cloudscraper in c:\users\tbr\appdata\roaming\python\python39\site-packages (from dailyblink==1.0.0) (1.2.58)
Requirement already satisfied: soupsieve>1.2 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from beautifulsoup4->dailyblink==1.0.0) (2.3.1)
Requirement already satisfied: pyparsing>=2.4.7 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from cloudscraper->dailyblink==1.0.0) (3.0.6)
Requirement already satisfied: requests-toolbelt>=0.9.1 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from cloudscraper->dailyblink==1.0.0) (0.9.1)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from requests->dailyblink==1.0.0) (1.26.7)
Requirement already satisfied: charset-normalizer~=2.0.0 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from requests->dailyblink==1.0.0) (2.0.7)
Requirement already satisfied: idna<4,>=2.5 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from requests->dailyblink==1.0.0) (3.3)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from requests->dailyblink==1.0.0) (2021.10.8)

C:\Users\tbr>cd dailyblink

C:\Users\tbr\dailyblink>python -m dailyblink
Downloading the free daily Blinks...

Detected a Cloudflare version 2 Captcha challenge, This feature is not available in the opensource (free) version.
Retrying...
Attempt 1/10... FAILED
Attempt 2/10... FAILED
cloudscraper.exceptions.CloudflareChallengeError: Detected a Cloudflare version 2 Captcha challenge, This feature is not available in the opensource (free) version.

During handling of the above exception, another exception occurred:

IndexError: list index out of range
Attempt 3/10...
C:\Users\tbr\dailyblink>python -m dailyblink
Downloading the free daily Blinks...

Detected a Cloudflare version 2 Captcha challenge, This feature is not available in the opensource (free) version.
Retrying...
Attempt 1/10... FAILED
Attempt 2/10... FAILED
Attempt 3/10... FAILED
Attempt 4/10... FAILED
Attempt 5/10... FAILED
Attempt 6/10... FAILED
cloudscraper.exceptions.CloudflareChallengeError: Detected a Cloudflare version 2 Captcha challenge, This feature is not available in the opensource (free) version.

During handling of the above exception, another exception occurred:

IndexError: list index out of range
Attempt 7/10...
C:\Users\tbr\dailyblink>python -m dailyblink
Downloading the free daily Blinks...

Detected a Cloudflare version 2 Captcha challenge, This feature is not available in the opensource (free) version.
Retrying...
Attempt 1/10... FAILED
Attempt 2/10... FAILED
Attempt 3/10... FAILED
cloudscraper.exceptions.CloudflareChallengeError: Detected a Cloudflare version 2 Captcha challenge, This feature is not available in the opensource (free) version.

During handling of the above exception, another exception occurred:

IndexError: list index out of range
Attempt 4/10...

C:\Users\tbr\dailyblink>python --version
Python 3.9.9

C:\Users\tbr\dailyblink>```
ptrstn commented 2 years ago

Todays GitHub actions job seems to run fine:

Downloading the free daily Blinks...

english (en):
Do Pause - Robert Poynton

Saving book text...
Saving book cover...
Saving audio track #1 - What’s in it for me? Learn the value of ...
Saving audio track #2 - We no longer stop to appreciate the view...
Saving audio track #3 - A pause isn’t an empty space – it’s an o...
Saving audio track #4 - Pausing improves our creativity and our ...
Saving audio track #5 - Pausing for a few seconds is valuable an...
Saving audio track #6 - Longer pauses need to be carefully desig...
Saving audio track #7 - Some cultures make it easier to pause th...
Saving audio track #8 - Final summary...
Creating playlist file...

german (de):
Human Touch - Rebecca Böhme

Saving book text...
Saving book cover...
Saving audio track #1 - Was drin ist für dich: Lernen, wie Berüh...
Saving audio track #2 - Berührungen sind für Babys lebensnotwend...
Saving audio track #3 - Kleine Kinder lernen durch Berührungen v...
Saving audio track #4 - Berührungen im Alltag beeinflussen unser...
Saving audio track #5 - Freundschaftliche Berührungen steigern u...
Saving audio track #6 - In der Liebe sind Berührungen ein Gradme...
Saving audio track #7 - Menschliche und tierische Berührungen we...
Saving audio track #8 - Kuschelparties, Tantra-Kurse und Co könn...
Saving audio track #9 - Zusammenfassung...
Creating playlist file...

All blinks were saved under /home/runner/Musik/blinks

Your particular error was fixed in v0.7.1

Rather than manually deleting the dailyblink folder, you should just upgrade the package:

pip install --upgrade --user git+https://github.com/ptrstn/dailyblink

Or alternatively uninstall it and then install it again:

pip uninstall dailyblink
pip install --user git+https://github.com/ptrstn/dailyblink

Make sure that you have at least version 0.7.1 installed:

dailyblink --version
dailyblink 1.0.0
kotzer3 commented 2 years ago

Thanks Peter, for the nice guide, but.. I updated it via both commands, because main.py returns: __main__.py 0.7.0

here is my update procedure.. (i uninstalled the version 1.0.0 and re-installed it)

C:\Users\tbr>pip install --upgrade --user git+https://github.com/ptrstn/dailyblink
Collecting git+https://github.com/ptrstn/dailyblink
  Cloning https://github.com/ptrstn/dailyblink to c:\users\tbr\appdata\local\temp\pip-req-build-euenbsb1
  Running command git clone --filter=blob:none -q https://github.com/ptrstn/dailyblink 'C:\Users\tbr\AppData\Local\Temp\pip-req-build-euenbsb1'
  Resolved https://github.com/ptrstn/dailyblink to commit 16fe482552b101d83412bfbb662b8754682ba7d2
  Preparing metadata (setup.py) ... done
Requirement already satisfied: requests in c:\users\tbr\appdata\roaming\python\python39\site-packages (from dailyblink==1.0.0) (2.26.0)
Requirement already satisfied: beautifulsoup4 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from dailyblink==1.0.0) (4.10.0)
Requirement already satisfied: mutagen in c:\users\tbr\appdata\roaming\python\python39\site-packages (from dailyblink==1.0.0) (1.45.1)
Requirement already satisfied: cloudscraper in c:\users\tbr\appdata\roaming\python\python39\site-packages (from dailyblink==1.0.0) (1.2.58)
Requirement already satisfied: soupsieve>1.2 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from beautifulsoup4->dailyblink==1.0.0) (2.3.1)
Requirement already satisfied: requests-toolbelt>=0.9.1 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from cloudscraper->dailyblink==1.0.0) (0.9.1)
Requirement already satisfied: pyparsing>=2.4.7 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from cloudscraper->dailyblink==1.0.0) (3.0.6)
Requirement already satisfied: charset-normalizer~=2.0.0 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from requests->dailyblink==1.0.0) (2.0.7)
Requirement already satisfied: idna<4,>=2.5 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from requests->dailyblink==1.0.0) (3.3)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from requests->dailyblink==1.0.0) (1.26.7)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from requests->dailyblink==1.0.0) (2021.10.8)

C:\Users\tbr>cd dailyblink

C:\Users\tbr\dailyblink>dailyblink --version
Der Befehl "dailyblink" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.

C:\Users\tbr\dailyblink>python -m dailyblink --version
__main__.py 0.7.0

C:\Users\tbr\dailyblink>cd ..

C:\Users\tbr>pip uninstall dailyblink
Found existing installation: dailyblink 1.0.0
Uninstalling dailyblink-1.0.0:
  Would remove:
    c:\users\tbr\appdata\roaming\python\python39\scripts\dailyblink-script.py
    c:\users\tbr\appdata\roaming\python\python39\scripts\dailyblink.exe
    c:\users\tbr\appdata\roaming\python\python39\site-packages\dailyblink-1.0.0-py3.9.egg-info
    c:\users\tbr\appdata\roaming\python\python39\site-packages\dailyblink\*
Proceed (Y/n)? y
  Successfully uninstalled dailyblink-1.0.0

C:\Users\tbr>pip install --user git+https://github.com/ptrstn/dailyblink
Collecting git+https://github.com/ptrstn/dailyblink
  Cloning https://github.com/ptrstn/dailyblink to c:\users\tbr\appdata\local\temp\pip-req-build-g51sb56_
  Running command git clone --filter=blob:none -q https://github.com/ptrstn/dailyblink 'C:\Users\tbr\AppData\Local\Temp\pip-req-build-g51sb56_'
  Resolved https://github.com/ptrstn/dailyblink to commit 16fe482552b101d83412bfbb662b8754682ba7d2
  Preparing metadata (setup.py) ... done
Requirement already satisfied: requests in c:\users\tbr\appdata\roaming\python\python39\site-packages (from dailyblink==1.0.0) (2.26.0)
Requirement already satisfied: beautifulsoup4 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from dailyblink==1.0.0) (4.10.0)
Requirement already satisfied: mutagen in c:\users\tbr\appdata\roaming\python\python39\site-packages (from dailyblink==1.0.0) (1.45.1)
Requirement already satisfied: cloudscraper in c:\users\tbr\appdata\roaming\python\python39\site-packages (from dailyblink==1.0.0) (1.2.58)
Requirement already satisfied: soupsieve>1.2 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from beautifulsoup4->dailyblink==1.0.0) (2.3.1)
Requirement already satisfied: pyparsing>=2.4.7 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from cloudscraper->dailyblink==1.0.0) (3.0.6)
Requirement already satisfied: requests-toolbelt>=0.9.1 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from cloudscraper->dailyblink==1.0.0) (0.9.1)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from requests->dailyblink==1.0.0) (2021.10.8)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from requests->dailyblink==1.0.0) (1.26.7)
Requirement already satisfied: charset-normalizer~=2.0.0 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from requests->dailyblink==1.0.0) (2.0.7)
Requirement already satisfied: idna<4,>=2.5 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from requests->dailyblink==1.0.0) (3.3)
Using legacy 'setup.py install' for dailyblink, since package 'wheel' is not installed.
Installing collected packages: dailyblink
    Running setup.py install for dailyblink ... done
Successfully installed dailyblink-1.0.0

C:\Users\tbr>cd dailyblink

C:\Users\tbr\dailyblink>python -m dailyblink --version
__main__.py 0.7.0

C:\Users\tbr\dailyblink>python -m dailyblink
Downloading the free daily Blinks...

Traceback (most recent call last):
  File "C:\Users\tbr\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Users\tbr\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "C:\Users\tbr\dailyblink\dailyblink\__main__.py", line 77, in <module>
    main()
  File "C:\Users\tbr\dailyblink\dailyblink\__main__.py", line 61, in main
    download_blinks(scraper, languages, base_path)
  File "C:\Users\tbr\dailyblink\dailyblink\utils.py", line 18, in download_blinks
    blink_info = get_daily_blink_info(scraper=scraper, language=language_code)
  File "C:\Users\tbr\dailyblink\dailyblink\core.py", line 39, in get_daily_blink_info
    return _create_blink_info(response.text)
  File "C:\Users\tbr\dailyblink\dailyblink\core.py", line 22, in _create_blink_info
    cover_url = soup.find_all("img", {"class": "book-cover__image"})[0]["src"]
IndexError: list index out of range

C:\Users\tbr\dailyblink>

due to a copy'n'paste error on my cmd terminal i found a command (to a temporary executable?) which was working:

C:\Users\tbr\dailyblink>c:\users\tbr\appdata\roaming\python\python39\scripts\dailyblink.exe
Downloading the free daily Blinks...

english (en):
At Your Best - Carey Nieuwhof

Saving book text...
Saving book cover...
Saving audio track #1 - What’s in it for me? A simple guide to b...
Saving audio track #2 - Thriving is when your time, energy, and ...
Saving audio track #3 - Focus your time by discovering your ener...
Saving audio track #4 - Leverage your energy by doing your best ...
Saving audio track #5 - Realize your priorities by focusing on t...
Saving audio track #6 - Prioritize the right relationships and l...
Saving audio track #7 - Life happens. Focus on what you can cont...
Saving audio track #8 - Final summary...
Creating playlist file...

german (de):
Steh dir nicht im Weg - Renate Dehner & Ulrich Dehner

Saving book text...
Saving book cover...
Saving audio track #1 - Was drin ist für dich: Über deinen Schat...
Saving audio track #2 - Der Grund für negative Gefühle sind auto...
Saving audio track #3 - Löse negative Denkmuster durch bewusstes...
Saving audio track #4 - Stelle konstruktive Fragen und mobilisie...
Saving audio track #5 - Wir gestalten unser Leben nach inneren G...
Saving audio track #6 - Durch mentales Training kannst du dir se...
Saving audio track #7 - Stress- und Panikattacken sind in den me...
Saving audio track #8 - Du kannst lernen, innere Alarmzustände z...
Saving audio track #9 - Zusammenfassung...
Creating playlist file...

All blinks were saved under C:\Users\tbr\Musik\blinks

C:\Users\tbr\dailyblink>python -m dailyblink
Downloading the free daily Blinks...

Detected a Cloudflare version 2 Captcha challenge, This feature is not available in the opensource (free) version.
Retrying...
cloudscraper.exceptions.CloudflareChallengeError: Detected a Cloudflare version 2 Captcha challenge, This feature is not available in the opensource (free) version.

During handling of the above exception, another exception occurred:

IndexError: list index out of range
Attempt 1/10...
C:\Users\tbr\dailyblink>
ptrstn commented 2 years ago

Did you update your python version recently? Seems like an issue with Windows and not the package itself, but fine. Here's some Windows customer service:

First uninstall your package as described

pip uninstall dailyblink

Then check if the dailyblink executable is still there by just running it. If it is still there, then check where it's located using the where command:

where dailyblink

On my windows laptop it is:

C:\Users\tbr\AppData\Roaming\Python\Python36\Scripts\dailyblink.exe

Then manually remove this file and probably also:

C:\Users\tbr\AppData\Roaming\Python\Python36\site-packages\dailyblink

and:

C:\Users\tbr\AppData\Roaming\Python\Python36\site-packages\dailyblink-0.7.0.dist-info

Do this for every python3x folder you see at:

C:\Users\tbr\AppData\Roaming\Python

Then make sure the dailyblink command doesn't work anymore. After that install the package again as usual.

ptrstn commented 2 years ago

Btw, I'm not sure why that folder C:\Users\tbr\dailyblink is even necessary. The dailyblink command should work without it.

Just install it via:

python -m pip install --user git+https://github.com/ptrstn/dailyblink

And run it with:

python -m dailyblink

Or just:

dailyblink
kotzer3 commented 2 years ago

Thanks Peter, I think there was something wrong (on my local machine), the clean re-install procedure did it :)

For completeness: There were 4 fragments of dailyblink: (pip uninstall dailyblink removes them, manually deleting would end in error message, that dailyblink isn't installed..

C:\Users\tbr>dir C:\Users\tbr\AppData\Roaming\Python\Python39\Scripts\daily*
27.12.2021  08:50             1.052 dailyblink-script.py
27.12.2021  08:50            74.752 dailyblink.exe
               2 Datei(en),         75.804 Bytes
C:\Users\tbr>dir C:\Users\tbr\AppData\Roaming\Python\Python39\site-packages\daily*
27.12.2021  08:50    <DIR>          dailyblink
27.12.2021  08:50    <DIR>          dailyblink-1.0.0-py3.9.egg-info

here uninstall procedure in detail:

C:\Users\tbr>where dailyblink
INFORMATION: Es konnten keine Dateien mit dem angegebenen
Muster gefunden werden.

C:\Users\tbr>pip uninstall dailyblink
WARNING: Skipping dailyblink as it is not installed.

i had to restore the manually deleted items from recycle bin, then uninstall command worked as expected

C:\Users\tbr>pip uninstall dailyblink
Found existing installation: dailyblink 1.0.0
Uninstalling dailyblink-1.0.0:
  Would remove:
    c:\users\tbr\appdata\roaming\python\python39\scripts\dailyblink-script.py
    c:\users\tbr\appdata\roaming\python\python39\scripts\dailyblink.exe
    c:\users\tbr\appdata\roaming\python\python39\site-packages\dailyblink-1.0.0-py3.9.egg-info
    c:\users\tbr\appdata\roaming\python\python39\site-packages\dailyblink\*
Proceed (Y/n)? y
  Successfully uninstalled dailyblink-1.0.0

Then i removed the left over dailyblink by hand:

C:\Users\tbr>del dailyblink
Möchten Sie "C:\Users\tbr\dailyblink\*" löschen (J/N)? j

and installed and the run was successfully. Thx for your Windows customer service 👍

C:\Users\tbr>python -m pip install --user git+https://github.com/ptrstn/dailyblink
Collecting git+https://github.com/ptrstn/dailyblink
  Cloning https://github.com/ptrstn/dailyblink to c:\users\tbr\appdata\local\temp\pip-req-build-qc3wvz8j
  Running command git clone --filter=blob:none -q https://github.com/ptrstn/dailyblink 'C:\Users\tbr\AppData\Local\Temp\pip-req-build-qc3wvz8j'
  Resolved https://github.com/ptrstn/dailyblink to commit 16fe482552b101d83412bfbb662b8754682ba7d2
  Preparing metadata (setup.py) ... done
Requirement already satisfied: requests in c:\users\tbr\appdata\roaming\python\python39\site-packages (from dailyblink==1.0.0) (2.26.0)
Requirement already satisfied: beautifulsoup4 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from dailyblink==1.0.0) (4.10.0)
Requirement already satisfied: mutagen in c:\users\tbr\appdata\roaming\python\python39\site-packages (from dailyblink==1.0.0) (1.45.1)
Requirement already satisfied: cloudscraper in c:\users\tbr\appdata\roaming\python\python39\site-packages (from dailyblink==1.0.0) (1.2.58)
Requirement already satisfied: soupsieve>1.2 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from beautifulsoup4->dailyblink==1.0.0) (2.3.1)
Requirement already satisfied: pyparsing>=2.4.7 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from cloudscraper->dailyblink==1.0.0) (3.0.6)
Requirement already satisfied: requests-toolbelt>=0.9.1 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from cloudscraper->dailyblink==1.0.0) (0.9.1)
Requirement already satisfied: idna<4,>=2.5 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from requests->dailyblink==1.0.0) (3.3)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from requests->dailyblink==1.0.0) (1.26.7)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from requests->dailyblink==1.0.0) (2021.10.8)
Requirement already satisfied: charset-normalizer~=2.0.0 in c:\users\tbr\appdata\roaming\python\python39\site-packages (from requests->dailyblink==1.0.0) (2.0.7)
Using legacy 'setup.py install' for dailyblink, since package 'wheel' is not installed.
Installing collected packages: dailyblink
    Running setup.py install for dailyblink ... done
Successfully installed dailyblink-1.0.0

C:\Users\tbr>python -m dailyblink
Downloading the free daily Blinks...
Detected a Cloudflare version 2 Captcha challenge, This feature is not available in the opensource (free) version.
Retrying...
Attempt 1/10... FAILED
Attempt 2/10... FAILED
Attempt 3/10... FAILED
Attempt 4/10...
english (en):
21st Century Investing - William Burckart and Steven D. Lydenberg

Saving book text...
Saving book cover...
Saving audio track #1 - What’s in it for me? Learn to invest in ...
Saving audio track #2 - System-level investing strengthens the s...
Saving audio track #3 - Target your investments b...--snip--

now the version fits:

C:\Users\tbr>python -m dailyblink --version
__main__.py 1.0.0