glmcdona / LuxPythonEnvGym

Matching python environment code for Lux AI 2021 Kaggle competition, and a gym interface for RL models.
MIT License
73 stars 38 forks source link

Problems with installation #107

Closed alesolano closed 2 years ago

alesolano commented 2 years ago

Hi! I saw your post in Kaggle introducing this engine and it looks very promising. I'm trying to install it to give it a try but I'm having some problems.

In particular, there's this error that's stopping the installation:

AttributeError: 'BuiltinObjectType' object has no attribute 'exception_value'

Here is the Dockerfile that I'm using so you can see all the dependencies installed.

FROM ubuntu:18.04

# Basic setup
RUN apt-get update && apt-get install -y -q --no-install-recommends \
        apt-transport-https \
        ca-certificates \
        curl \
        wget \
        software-properties-common

# NVM environment variables
ENV NVM_DIR /usr/local/nvm
ENV NODE_VERSION 14.16.0
# Install NVM
RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.2/install.sh | bash

# Install Node and NPM
RUN . $NVM_DIR/nvm.sh \
    && nvm install $NODE_VERSION \
    && nvm alias default $NODE_VERSION \
    && nvm use default

# Add node and npm to path so the commands are available
ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules
ENV PATH $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH

# ### Install Python ###
# Python 3.7
RUN apt-get update && apt-get install -y \
        python3.7 \
        python3-pip \
        ipython3
# Set Python3.7 as default
RUN ln -s python3.7 /usr/bin/python
RUN ln -s pip3 /usr/bin/pip

### Install Lux AI ###
# Recommended game engine:
# RUN npm i -g @lux-ai/2021-challenge@latest

# Alternative game engine (45x faster performance)
RUN apt-get update && apt-get install -y python3.7-dev
RUN apt-get update && apt-get install -y git
RUN python3.7 -m pip install --upgrade pip
RUN python3.7 -m pip install numpy Cython
RUN git clone https://github.com/glmcdona/LuxPythonEnvGym
RUN cd LuxPythonEnvGym && python setup.py install

Here's the last lines of the logs:

#16 506.5 multiprocessing.pool.RemoteTraceback: 
#16 506.5 """
#16 506.5 Traceback (most recent call last):
#16 506.5   File "/usr/lib/python3.7/multiprocessing/pool.py", line 121, in worker
#16 506.5     result = (True, func(*args, **kwds))
#16 506.5   File "/usr/lib/python3.7/multiprocessing/pool.py", line 44, in mapstar
#16 506.5     return list(map(*args))
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Build/Dependencies.py", line 1249, in cythonize_one_helper
#16 506.5     return cythonize_one(*m)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Build/Dependencies.py", line 1208, in cythonize_one
#16 506.5     result = compile_single(pyx_file, options, full_module_name=full_module_name)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Main.py", line 727, in compile_single
#16 506.5     return run_pipeline(source, options, full_module_name)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Main.py", line 515, in run_pipeline
#16 506.5     err, enddata = Pipeline.run_pipeline(pipeline, source)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Pipeline.py", line 355, in run_pipeline
#16 506.5     data = run(phase, data)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Pipeline.py", line 335, in run
#16 506.5     return phase(data)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Pipeline.py", line 52, in generate_pyx_code_stage
#16 506.5     module_node.process_implementation(options, result)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/ModuleNode.py", line 143, in process_implementation
#16 506.5     self.generate_c_code(env, options, result)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/ModuleNode.py", line 385, in generate_c_code
#16 506.5     self.body.generate_function_definitions(env, code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Nodes.py", line 442, in generate_function_definitions
#16 506.5     stat.generate_function_definitions(env, code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Nodes.py", line 442, in generate_function_definitions
#16 506.5     stat.generate_function_definitions(env, code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Nodes.py", line 3179, in generate_function_definitions
#16 506.5     FuncDefNode.generate_function_definitions(self, env, code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Nodes.py", line 1986, in generate_function_definitions
#16 506.5     self.generate_function_body(env, code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Nodes.py", line 1748, in generate_function_body
#16 506.5     self.body.generate_execution_code(code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Nodes.py", line 448, in generate_execution_code
#16 506.5     stat.generate_execution_code(code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/UtilNodes.py", line 326, in generate_execution_code
#16 506.5     self.body.generate_execution_code(code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Nodes.py", line 6715, in generate_execution_code
#16 506.5     self.body.generate_execution_code(code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Nodes.py", line 448, in generate_execution_code
#16 506.5     stat.generate_execution_code(code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Nodes.py", line 6285, in generate_execution_code
#16 506.5     self.else_clause.generate_execution_code(code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Nodes.py", line 448, in generate_execution_code
#16 506.5     stat.generate_execution_code(code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Nodes.py", line 7228, in generate_execution_code
#16 506.5     self.body.generate_execution_code(code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Nodes.py", line 448, in generate_execution_code
#16 506.5     stat.generate_execution_code(code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Nodes.py", line 5156, in generate_execution_code
#16 506.5     self.expr.generate_evaluation_code(code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/ExprNodes.py", line 5875, in generate_evaluation_code
#16 506.5     self.allocate_temp_result(code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/ExprNodes.py", line 721, in allocate_temp_result
#16 506.5     elif not (self.result_is_used or type.is_memoryviewslice or self.is_c_result_required()):
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/ExprNodes.py", line 5841, in is_c_result_required
#16 506.5     if not func_type.exception_value or func_type.exception_check == '+':
#16 506.5 AttributeError: 'BuiltinObjectType' object has no attribute 'exception_value'
#16 506.5 """
#16 506.5 
#16 506.5 The above exception was the direct cause of the following exception:
#16 506.5 
#16 506.5 Traceback (most recent call last):
#16 506.5   File "/usr/lib/python3/dist-packages/setuptools/sandbox.py", line 154, in save_modules
#16 506.5     yield saved
#16 506.5   File "/usr/lib/python3/dist-packages/setuptools/sandbox.py", line 195, in setup_context
#16 506.5     yield
#16 506.5   File "/usr/lib/python3/dist-packages/setuptools/sandbox.py", line 250, in run_setup
#16 506.5     _execfile(setup_script, ns)
#16 506.5   File "/usr/lib/python3/dist-packages/setuptools/sandbox.py", line 45, in _execfile
#16 506.5     exec(code, globals, locals)
#16 506.5   File "/tmp/easy_install-jufi3avs/pandas-1.3.4/setup.py", line 650, in <module>
#16 506.5   File "/tmp/easy_install-jufi3avs/pandas-1.3.4/setup.py", line 423, in maybe_cythonize
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Build/Dependencies.py", line 1093, in cythonize
#16 506.5     result.get(99999)  # seconds
#16 506.5   File "/usr/lib/python3.7/multiprocessing/pool.py", line 657, in get
#16 506.5     raise self._value
#16 506.5 AttributeError: 'BuiltinObjectType' object has no attribute 'exception_value'
#16 506.5 
#16 506.5 During handling of the above exception, another exception occurred:
#16 506.5 
#16 506.5 Traceback (most recent call last):
#16 506.5   File "setup.py", line 24, in <module>
#16 506.5     tests_require=['nose2'],
#16 506.5   File "/usr/lib/python3/dist-packages/setuptools/__init__.py", line 129, in setup
#16 506.5     return distutils.core.setup(**attrs)
#16 506.5   File "/usr/lib/python3.7/distutils/core.py", line 148, in setup
#16 506.5     dist.run_commands()
#16 506.5   File "/usr/lib/python3.7/distutils/dist.py", line 966, in run_commands
#16 506.5     self.run_command(cmd)
#16 506.5   File "/usr/lib/python3.7/distutils/dist.py", line 985, in run_command
#16 506.5     cmd_obj.run()
#16 506.5   File "/usr/lib/python3/dist-packages/setuptools/command/install.py", line 67, in run
#16 506.5     self.do_egg_install()
#16 506.5   File "/usr/lib/python3/dist-packages/setuptools/command/install.py", line 117, in do_egg_install
#16 506.5     cmd.run()
#16 506.5   File "/usr/lib/python3/dist-packages/setuptools/command/easy_install.py", line 437, in run
#16 506.5     self.easy_install(spec, not self.no_deps)
#16 506.5   File "/usr/lib/python3/dist-packages/setuptools/command/easy_install.py", line 679, in easy_install
#16 506.5     return self.install_item(None, spec, tmpdir, deps, True)
#16 506.5   File "/usr/lib/python3/dist-packages/setuptools/command/easy_install.py", line 726, in install_item
#16 506.5     self.process_distribution(spec, dist, deps)
#16 506.5   File "/usr/lib/python3/dist-packages/setuptools/command/easy_install.py", line 771, in process_distribution
#16 506.5     [requirement], self.local_index, self.easy_install
#16 506.5   File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 774, in resolve
#16 506.5     replace_conflicting=replace_conflicting
#16 506.5   File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 1057, in best_match
#16 506.5     return self.obtain(req, installer)
#16 506.5   File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 1069, in obtain
#16 506.5     return installer(requirement)
#16 506.5   File "/usr/lib/python3/dist-packages/setuptools/command/easy_install.py", line 698, in easy_install
#16 506.5     return self.install_item(spec, dist.location, tmpdir, deps)
#16 506.5   File "/usr/lib/python3/dist-packages/setuptools/command/easy_install.py", line 724, in install_item
#16 506.5     dists = self.install_eggs(spec, download, tmpdir)
#16 506.5   File "/usr/lib/python3/dist-packages/setuptools/command/easy_install.py", line 909, in install_eggs
#16 506.5     return self.build_and_install(setup_script, setup_base)
#16 506.5   File "/usr/lib/python3/dist-packages/setuptools/command/easy_install.py", line 1177, in build_and_install
#16 506.5     self.run_setup(setup_script, setup_base, args)
#16 506.5   File "/usr/lib/python3/dist-packages/setuptools/command/easy_install.py", line 1163, in run_setup
#16 506.5     run_setup(setup_script, args)
#16 506.5   File "/usr/lib/python3/dist-packages/setuptools/sandbox.py", line 253, in run_setup
#16 506.5 Traceback (most recent call last):
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Build/Dependencies.py", line 1249, in cythonize_one_helper
#16 506.5     return cythonize_one(*m)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Build/Dependencies.py", line 1208, in cythonize_one
#16 506.5     result = compile_single(pyx_file, options, full_module_name=full_module_name)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Main.py", line 727, in compile_single
#16 506.5     return run_pipeline(source, options, full_module_name)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Main.py", line 515, in run_pipeline
#16 506.5     err, enddata = Pipeline.run_pipeline(pipeline, source)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Pipeline.py", line 355, in run_pipeline
#16 506.5     data = run(phase, data)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Pipeline.py", line 335, in run
#16 506.5     return phase(data)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Pipeline.py", line 52, in generate_pyx_code_stage
#16 506.5     module_node.process_implementation(options, result)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/ModuleNode.py", line 143, in process_implementation
#16 506.5     self.generate_c_code(env, options, result)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/ModuleNode.py", line 385, in generate_c_code
#16 506.5     self.body.generate_function_definitions(env, code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Nodes.py", line 442, in generate_function_definitions
#16 506.5     stat.generate_function_definitions(env, code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Nodes.py", line 442, in generate_function_definitions
#16 506.5     stat.generate_function_definitions(env, code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Nodes.py", line 3179, in generate_function_definitions
#16 506.5     FuncDefNode.generate_function_definitions(self, env, code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Nodes.py", line 1986, in generate_function_definitions
#16 506.5     self.generate_function_body(env, code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Nodes.py", line 1748, in generate_function_body
#16 506.5     self.body.generate_execution_code(code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Nodes.py", line 448, in generate_execution_code
#16 506.5     stat.generate_execution_code(code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/UtilNodes.py", line 326, in generate_execution_code
#16 506.5     self.body.generate_execution_code(code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Nodes.py", line 6715, in generate_execution_code
#16 506.5     self.body.generate_execution_code(code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Nodes.py", line 448, in generate_execution_code
#16 506.5     stat.generate_execution_code(code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Nodes.py", line 6285, in generate_execution_code
#16 506.5     self.else_clause.generate_execution_code(code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Nodes.py", line 448, in generate_execution_code
#16 506.5     stat.generate_execution_code(code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Nodes.py", line 7228, in generate_execution_code
#16 506.5     self.body.generate_execution_code(code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Nodes.py", line 448, in generate_execution_code
#16 506.5     stat.generate_execution_code(code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/Nodes.py", line 5156, in generate_execution_code
#16 506.5     self.expr.generate_evaluation_code(code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/ExprNodes.py", line 5875, in generate_evaluation_code
#16 506.5     self.allocate_temp_result(code)
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/ExprNodes.py", line 721, in allocate_temp_result
#16 506.5     elif not (self.result_is_used or type.is_memoryviewslice or self.is_c_result_required()):
#16 506.5   File "/usr/local/lib/python3.7/dist-packages/Cython/Compiler/ExprNodes.py", line 5841, in is_c_result_required
#16 506.5     if not func_type.exception_value or func_type.exception_check == '+':
#16 506.5 AttributeError: 'BuiltinObjectType' object has no attribute 'exception_value'
#16 506.5 [ 1/41] Cythonizing pandas/_libs/algos.pyx
#16 506.5 [ 2/41] Cythonizing pandas/_libs/arrays.pyx
#16 506.5 [ 3/41] Cythonizing pandas/_libs/groupby.pyx
#16 506.5 [ 4/41] Cythonizing pandas/_libs/hashing.pyx
#16 506.5 [ 5/41] Cythonizing pandas/_libs/hashtable.pyx
#16 506.5 [ 6/41] Cythonizing pandas/_libs/index.pyx
#16 506.5 [ 7/41] Cythonizing pandas/_libs/indexing.pyx
#16 506.5 [ 8/41] Cythonizing pandas/_libs/internals.pyx
#16 506.5 [ 9/41] Cythonizing pandas/_libs/interval.pyx
#16 506.5 [10/41] Cythonizing pandas/_libs/join.pyx
#16 506.5 [11/41] Cythonizing pandas/_libs/lib.pyx
#16 506.5 [12/41] Cythonizing pandas/_libs/missing.pyx
#16 506.5 [13/41] Cythonizing pandas/_libs/ops.pyx
#16 506.5 [14/41] Cythonizing pandas/_libs/ops_dispatch.pyx
#16 506.5 [15/41] Cythonizing pandas/_libs/parsers.pyx
#16 506.5 [16/41] Cythonizing pandas/_libs/properties.pyx
#16 506.5 [17/41] Cythonizing pandas/_libs/reduction.pyx
#16 506.5 [18/41] Cythonizing pandas/_libs/reshape.pyx
#16 506.5 [19/41] Cythonizing pandas/_libs/sparse.pyx
#16 506.5 [20/41] Cythonizing pandas/_libs/testing.pyx
#16 506.5 [21/41] Cythonizing pandas/_libs/tslib.pyx
#16 506.5 [22/41] Cythonizing pandas/_libs/tslibs/base.pyx
#16 506.5 [23/41] Cythonizing pandas/_libs/tslibs/ccalendar.pyx
#16 506.5 [24/41] Cythonizing pandas/_libs/tslibs/conversion.pyx
#16 506.5 [25/41] Cythonizing pandas/_libs/tslibs/dtypes.pyx
#16 506.5 [26/41] Cythonizing pandas/_libs/tslibs/fields.pyx
#16 506.5 [27/41] Cythonizing pandas/_libs/tslibs/nattype.pyx
#16 506.5 [28/41] Cythonizing pandas/_libs/tslibs/np_datetime.pyx
#16 506.5 [29/41] Cythonizing pandas/_libs/tslibs/offsets.pyx
#16 506.5 [30/41] Cythonizing pandas/_libs/tslibs/parsing.pyx
#16 506.5 [31/41] Cythonizing pandas/_libs/tslibs/period.pyx
#16 506.5 [32/41] Cythonizing pandas/_libs/tslibs/strptime.pyx
#16 506.5 [33/41] Cythonizing pandas/_libs/tslibs/timedeltas.pyx
#16 506.5 [34/41] Cythonizing pandas/_libs/tslibs/timestamps.pyx
#16 506.5 [35/41] Cythonizing pandas/_libs/tslibs/timezones.pyx
#16 506.5 [36/41] Cythonizing pandas/_libs/tslibs/tzconversion.pyx
#16 506.5 [37/41] Cythonizing pandas/_libs/tslibs/vectorized.pyx
#16 506.5 [38/41] Cythonizing pandas/_libs/window/aggregations.pyx
#16 506.5 [39/41] Cythonizing pandas/_libs/window/indexers.pyx
#16 506.5 [40/41] Cythonizing pandas/_libs/writers.pyx
#16 506.5 [41/41] Cythonizing pandas/io/sas/sas.pyx
#16 506.6     raise
#16 506.6   File "/usr/lib/python3.7/contextlib.py", line 130, in __exit__
#16 506.6     self.gen.throw(type, value, traceback)
#16 506.6   File "/usr/lib/python3/dist-packages/setuptools/sandbox.py", line 195, in setup_context
#16 506.6     yield
#16 506.6   File "/usr/lib/python3.7/contextlib.py", line 130, in __exit__
#16 506.6     self.gen.throw(type, value, traceback)
#16 506.6   File "/usr/lib/python3/dist-packages/setuptools/sandbox.py", line 166, in save_modules
#16 506.6     saved_exc.resume()
#16 506.6   File "/usr/lib/python3/dist-packages/setuptools/sandbox.py", line 141, in resume
#16 506.6     six.reraise(type, exc, self._tb)
#16 506.6   File "/usr/lib/python3/dist-packages/setuptools/_vendor/six.py", line 685, in reraise
#16 506.6     raise value.with_traceback(tb)
#16 506.6   File "/usr/lib/python3/dist-packages/setuptools/sandbox.py", line 154, in save_modules
#16 506.6     yield saved
#16 506.6   File "/usr/lib/python3/dist-packages/setuptools/sandbox.py", line 195, in setup_context
#16 506.6     yield
#16 506.6   File "/usr/lib/python3/dist-packages/setuptools/sandbox.py", line 250, in run_setup
#16 506.6     _execfile(setup_script, ns)
#16 506.6   File "/usr/lib/python3/dist-packages/setuptools/sandbox.py", line 45, in _execfile
#16 506.6     exec(code, globals, locals)
#16 506.6   File "/tmp/easy_install-jufi3avs/pandas-1.3.4/setup.py", line 650, in <module>
#16 506.6   File "/tmp/easy_install-jufi3avs/pandas-1.3.4/setup.py", line 423, in maybe_cythonize
#16 506.6   File "/usr/local/lib/python3.7/dist-packages/Cython/Build/Dependencies.py", line 1093, in cythonize
#16 506.6     result.get(99999)  # seconds
#16 506.6   File "/usr/lib/python3.7/multiprocessing/pool.py", line 657, in get
#16 506.6     raise self._value
#16 506.6 AttributeError: 'BuiltinObjectType' object has no attribute 'exception_value'

Hope you've encountered this before! If you have some idea of how I can fix it, please let me know.

Thanks and congrats for the repo :D

nosound2 commented 2 years ago

Hi, this is not related to LuxPythonEnvGym, is it?

alesolano commented 2 years ago

Yes. It's an error that arises when doing python setup.py install in the repo directory.

We can also see this issue as: "what are the dependencies needed to run python setup.py install successfully?"

royerk commented 2 years ago

I haven't tried to run it, some "what if" I would consider:

Edit, running it, I have a bazillion cc1plus: warning: command line option ‘-std=gnu99’ is valid for C/ObjC but not for C++

royerk commented 2 years ago

@alesolano found it, since we are using python setup.py install we need in the dockerfile:

Also I commented out the following lines:

And Successfully tagged lux:latest

@nosound2 yeah this is not an environment per say, I thought it was worth helping since packaging code with docker is a common practice :)

alesolano commented 2 years ago

Worked! Thanks :D