Home > Mobile >  Azure / Django / Celery / Ubuntu | tkinter & libtk8.6.so import issue
Azure / Django / Celery / Ubuntu | tkinter & libtk8.6.so import issue

Time:03-11

UPDATE / SOLUTION Per Sytech's answer....

Did not realize that the build was in Ubuntu which has all the packages but when Azure deploys it to a Linux container, the needed packages were missing.

Like in other questions/answers just add these installs to a startup script that Azure will use ex.

#!/bin/bash
apt-get update
apt-get install tk --yes
python manage.py wait_for_db
python manage.py migrate
gunicorn --bind=0.0.0.0 --timeout 600 app.wsgi --access-logfile '-' --error-logfile '-' &
celery -A app worker -l info --uid=1

Original Post: When Azure builds & deploys a Python3.9 Django/Django-Rest WebApp it has been failing in it's start up.

Error in question ( full logs below )

2022-03-08T21:13:30.385999188Z   File "/tmp/8da0147da65ec79/core/models.py", line 1, in <module>

2022-03-08T21:13:30.386659422Z     from tkinter import CASCADE

2022-03-08T21:13:30.387587669Z   File "/opt/python/3.9.7/lib/python3.9/tkinter/__init__.py", line 37, in <module>

2022-03-08T21:13:30.387993189Z     import _tkinter # If this fails your Python may not be configured for Tk

2022-03-08T21:13:30.388227101Z ImportError: libtk8.6.so: cannot open shared object file: No such file or directory

I have come across other answers to this needing to make sure that tkinter is installed with sudo apt-get python3-tk which I have added to the deployment yml file

Though it still seems to have issue. Reverting back to previous code for deployment is successful and the only feature that has been added to the application is Celery. Not sure if that has anything to do with it or not.

Am I adding the installation of the tk/tkinter in the wrong sequence?

When I revert the to previous code and have a successful build/deploy I ssh into the container and run the python shell and try to manually import the tkinter module.

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/opt/python/3.9.7/lib/python3.9/tkinter/__init__.py", line 37, in <module>
    import _tkinter # If this fails your Python may not be configured for Tk
ImportError: libtk8.6.so: cannot open shared object file: No such file or directory

it errors out like expected.

when I run apt-get update && apt-get install python3-tk --yes manually in the container, then go back to the shell on the container there is not error importing tkinter.

Which leads me to believe something is not installing in the right place? virtualenv? Or is being overwritten in the build process?

build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Set up Python version
        uses: actions/setup-python@v1
        with:
          python-version: "3.9"

      - name: Create and start virtual environment
        run: |
          python -m venv venv
          source venv/bin/activate

      - name: Install TK dependency
        run: |
          sudo apt-get update
          sudo apt-get install python3-tk

      - name: Install dependencies
        run: pip install -r requirements.txt

      - name: Upload artifact for deployment jobs
        uses: actions/upload-artifact@v2
        with:
          name: python-app
          path: |
            . 
            !venv/

App Log spit out below...

2022-03-08T21:13:27.830330743Z Updated PYTHONPATH to ':/opt/startup/code_profiler:/tmp/8da0147da65ec79/antenv/lib/python3.9/site-packages'

2022-03-08T21:13:30.370903021Z Traceback (most recent call last):

2022-03-08T21:13:30.371872470Z   File "/tmp/8da0147da65ec79/manage.py", line 22, in <module>

2022-03-08T21:13:30.372648510Z     main()

2022-03-08T21:13:30.373176037Z   File "/tmp/8da0147da65ec79/manage.py", line 18, in main

2022-03-08T21:13:30.373892773Z     execute_from_command_line(sys.argv)

2022-03-08T21:13:30.374862922Z   File "/tmp/8da0147da65ec79/antenv/lib/python3.9/site-packages/django/core/management/__init__.py", line 446, in execute_from_comma
nd_line

2022-03-08T21:13:30.374880323Z     utility.execute()

2022-03-08T21:13:30.378586012Z   File "/tmp/8da0147da65ec79/antenv/lib/python3.9/site-packages/django/core/management/__init__.py", line 420, in execute

2022-03-08T21:13:30.378603012Z     django.setup()

2022-03-08T21:13:30.378607713Z   File "/tmp/8da0147da65ec79/antenv/lib/python3.9/site-packages/django/__init__.py", line 24, in setup

2022-03-08T21:13:30.378612113Z     apps.populate(settings.INSTALLED_APPS)

2022-03-08T21:13:30.378679216Z   File "/tmp/8da0147da65ec79/antenv/lib/python3.9/site-packages/django/apps/registry.py", line 116, in populate

2022-03-08T21:13:30.378689817Z     app_config.import_models()

2022-03-08T21:13:30.378694417Z   File "/tmp/8da0147da65ec79/antenv/lib/python3.9/site-packages/django/apps/config.py", line 304, in import_models

2022-03-08T21:13:30.379003533Z     self.models_module = import_module(models_module_name)

2022-03-08T21:13:30.381756173Z   File "/opt/python/3.9.7/lib/python3.9/importlib/__init__.py", line 127, in import_module

2022-03-08T21:13:30.383257849Z     return _bootstrap._gcd_import(name[level:], package, level)

2022-03-08T21:13:30.383423757Z   File "<frozen importlib._bootstrap>", line 1030, in _gcd_import

2022-03-08T21:13:30.383857479Z   File "<frozen importlib._bootstrap>", line 1007, in _find_and_load

2022-03-08T21:13:30.384148694Z   File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked

2022-03-08T21:13:30.384836329Z   File "<frozen importlib._bootstrap>", line 680, in _load_unlocked

2022-03-08T21:13:30.384850030Z   File "<frozen importlib._bootstrap_external>", line 850, in exec_module

2022-03-08T21:13:30.385281052Z   File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed

2022-03-08T21:13:30.385999188Z   File "/tmp/8da0147da65ec79/core/models.py", line 1, in <module>

2022-03-08T21:13:30.386659422Z     from tkinter import CASCADE

2022-03-08T21:13:30.387587669Z   File "/opt/python/3.9.7/lib/python3.9/tkinter/__init__.py", line 37, in <module>

2022-03-08T21:13:30.387993189Z     import _tkinter # If this fails your Python may not be configured for Tk

2022-03-08T21:13:30.388227101Z ImportError: libtk8.6.so: cannot open shared object file: No such file or directory
2022-03-08T21:13:36.193Z ERROR - Container <container_name>_0_fd6a978c for site <container_name> has exited, failing site start

CodePudding user response:

Tkinter is already included in the ubuntu-latest image. No particular setup is needed.

jobs:
  verify-tkinter:
    name: verify-tkinter
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set up Python version
        uses: actions/setup-python@v1
        with:
          python-version: "3.9"
      - name: show tk version
        run: |
          python -c "import tkinter;print(tkinter.TkVersion)"

If this error is occurring after deployment, you need to install tkinter in your deployment environment, which is separate from GitHub Actions runs.

On your server is running Ubuntu 20 and, make sure the tk package is installed, which provides the libtk8.6.so file needed.

apt install -y tk
  • Related