python-poetry / poetry

Python packaging and dependency management made easy
https://python-poetry.org
MIT License
31.7k stars 2.27k forks source link

Poetry fails to install the correct version of a git dependency if there are cached artifacts of the same version (but different commit hashes) #9075

Open opcode81 opened 8 months ago

opcode81 commented 8 months ago

Description

In our project, we depend on the source version of the tianshou library like so:

tianshou = { git = "https://github.com/thu-ml/tianshou.git", rev = "9b6cb6903eddb529437f949b76ffa87a9b9115e9" }

We update the commit hash sometimes, while the version that is stored in tianshou's pyproject.toml remains the same (it has been 0.5.1 for almost a year).

Now the issue that we encounter is that after the commit hash has been changed, on some machines, the new version of tianshou will not get installed when calling poetry install (after a lock update). Poetry will report this

Installing tianshou (0.5.1 9b6cb69)

but will in fact install a different version that is also associated with 0.5.1 but has a different hash. The exact conditions under which it will install an incorrect version are unknown. (It appears random to us.)

The issue only occurs on machines that had previously installed a different hash (but which is also 0.5.1).

The issue cannot be fixed by calling poetry with --no-cache, as this will not result in the tianshou repo being re-cloned! (Which I think is another, unrelated bug.) The issue can be fixed by deleting all cached versions of tianshou from the poetry cache.

Workarounds

Delete all cached versions of the respective dependency from the poetry cache. On Ubuntu find all files starting with tianshou in ~/.cache/pypoetry and delete the containing folders.

Poetry Installation Method

pipx

Operating System

Ubuntu

Poetry Version

1.7.1

Poetry Configuration

cache-dir = "/home/azureuser/.cache/pypoetry"
experimental.system-git-client = false
installer.max-workers = null
installer.modern-installation = true
installer.no-binary = null
installer.parallel = true
repositories.pytorch-cuda.url = "https://download.pytorch.org/whl/cu118"
virtualenvs.create = true
virtualenvs.in-project = null
virtualenvs.options.always-copy = false
virtualenvs.options.no-pip = false
virtualenvs.options.no-setuptools = false
virtualenvs.options.system-site-packages = false
virtualenvs.path = "{cache-dir}/virtualenvs"  # /home/azureuser/.cache/pypoetry/virtualenvs
virtualenvs.prefer-active-python = false
virtualenvs.prompt = "{project_name}-py{python_version}"
warnings.export = true

Python Sysconfig

Platform: "linux-x86_64"
Python version: "3.11"
Current installation scheme: "posix_prefix"

Paths: 
    data = "/anaconda/envs/rl4sem"
    include = "/anaconda/envs/rl4sem/include/python3.11"
    platinclude = "/anaconda/envs/rl4sem/include/python3.11"
    platlib = "/anaconda/envs/rl4sem/lib/python3.11/site-packages"
    platstdlib = "/anaconda/envs/rl4sem/lib/python3.11"
    purelib = "/anaconda/envs/rl4sem/lib/python3.11/site-packages"
    scripts = "/anaconda/envs/rl4sem/bin"
    stdlib = "/anaconda/envs/rl4sem/lib/python3.11"

Variables: 
    ABIFLAGS = ""
    AC_APPLE_UNIVERSAL_BUILD = "0"
    AIX_BUILDDATE = "0"
    AIX_GENUINE_CPLUSPLUS = "0"
    ALIGNOF_LONG = "8"
    ALIGNOF_SIZE_T = "8"
    ALT_SOABI = "0"
    ANDROID_API_LEVEL = "0"
    AR = "ar"
    ARFLAGS = "rcs"
    BASECFLAGS = ""
    BASECPPFLAGS = "-IObjects -IInclude -IPython"
    BASEMODLIBS = ""
    BINDIR = "/anaconda/envs/rl4sem/bin"
    BINLIBDEST = "/anaconda/envs/rl4sem/lib/python3.11"
    BLDLIBRARY = "libpython3.11.a"
    BLDSHARED = "gcc -pthread -B /anaconda/envs/rl4sem/compiler_compat -shared  -Wl,-rpath,/anaconda/envs/rl4sem/lib -Wl,-rpath-link,/anaconda/envs/rl4sem/lib -L/anaconda/envs/rl4sem/lib -Wl,-rpath,/anaconda/envs/rl4sem/lib -Wl,-rpath-link,/anaconda/envs/rl4sem/lib -L/anaconda/envs/rl4sem/lib"
    BOOTSTRAP_HEADERS = "\"
    BUILDEXE = ""
    BUILDPYTHON = "python"
    BUILD_GNU_TYPE = "x86_64-conda_cos6-linux-gnu"
    BYTESTR_DEPS = "\"
    CC = "gcc -pthread -B /anaconda/envs/rl4sem/compiler_compat"
    CCSHARED = "-fPIC"
    CFLAGS = "-DNDEBUG -fwrapv -O2 -Wall   -fPIC   -O2 -isystem /anaconda/envs/rl4sem/include -fPIC -O2   -isystem /anaconda/envs/rl4sem/include "
    CFLAGSFORSHARED = ""
    CFLAGS_ALIASING = ""
    CONFIGFILES = "configure configure.ac acconfig.h pyconfig.h.in Makefile.pre.in"
    CONFIGURE_CFLAGS = "-fPIC -O2 -isystem /anaconda/envs/rl4sem/include "
    CONFIGURE_CFLAGS_NODIST = "-fno-semantic-interposition  -g -std=c11 -Werror=implicit-function-declaration -fvisibility=hidden"
    CONFIGURE_CPPFLAGS = "-DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /anaconda/envs/rl4sem/include -I/anaconda/envs/rl4sem/include"
    CONFIGURE_LDFLAGS = "-Wl,-rpath,/anaconda/envs/rl4sem/lib -Wl,-rpath-link,/anaconda/envs/rl4sem/lib -L/anaconda/envs/rl4sem/lib"
    CONFIGURE_LDFLAGS_NODIST = "-fno-semantic-interposition  -g"
    CONFIGURE_LDFLAGS_NOLTO = "-fno-lto"
    CONFIG_ARGS = "'--prefix=/anaconda/envs/rl4sem''--build=x86_64-conda_cos6-linux-gnu''--host=x86_64-conda_cos6-linux-gnu''--enable-ipv6''--with-ensurepip=no''--with-tzpath=/anaconda/envs/rl4sem/share/zoneinfo:/anaconda/envs/rl4sem/share/tzinfo''--with-computed-gotos''--with-system-ffi''--enable-loadable-sqlite-extensions''--with-tcltk-includes=-I/anaconda/envs/rl4sem/include''--with-tcltk-libs=-L/anaconda/envs/rl4sem/lib -ltcl8.6 -ltk8.6''--with-platlibdir=lib''--with-lto''--enable-optimizations''-oldincludedir=/croot/python-split_1694437901252/_build_env/x86_64-conda_cos6-linux-gnu/sysroot/usr/include''--disable-shared''PROFILE_TASK=-m test --pgo''build_alias=x86_64-conda_cos6-linux-gnu''host_alias=x86_64-conda_cos6-linux-gnu''PKG_CONFIG_PATH=/anaconda/envs/rl4sem/lib/pkgconfig''MACHDEP=linux''CC=gcc''CFLAGS=   -fPIC -O2  -isystem /anaconda/envs/rl4sem/include ''LDFLAGS=   -Wl,-rpath,/anaconda/envs/rl4sem/lib -Wl,-rpath-link,/anaconda/envs/rl4sem/lib -L/anaconda/envs/rl4sem/lib''CPPFLAGS=-DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /anaconda/envs/rl4sem/include -I/anaconda/envs/rl4sem/include''CPP=/croot/python-split_1694437901252/_build_env/bin/cpp'"
    CONFINCLUDEDIR = "/anaconda/envs/rl4sem/include"
    CONFINCLUDEPY = "/anaconda/envs/rl4sem/include/python3.11"
    COREPYTHONPATH = ""
    COVERAGE_INFO = "/croot/python-split_1694437901252/work/build-static/coverage.info"
    COVERAGE_LCOV_OPTIONS = "--rc lcov_branch_coverage=1"
    COVERAGE_REPORT = "/croot/python-split_1694437901252/work/build-static/lcov-report"
    COVERAGE_REPORT_OPTIONS = "--rc lcov_branch_coverage=1 --branch-coverage --title "CPython 3.11 LCOV report [commit $(shell )]""
    CPPFLAGS = "-IObjects -IInclude -IPython -I. -I/croot/python-split_1694437901252/work/Include -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /anaconda/envs/rl4sem/include -I/anaconda/envs/rl4sem/include -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /anaconda/envs/rl4sem/include -I/anaconda/envs/rl4sem/include"
    CXX = "g++ -pthread -B /anaconda/envs/rl4sem/compiler_compat"
    DECIMAL_CFLAGS = "-I/croot/python-split_1694437901252/work/Modules/_decimal/libmpdec -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1"
    DECIMAL_LDFLAGS = "-lm Modules/_decimal/libmpdec/libmpdec.a"
    DEEPFREEZE_DEPS = "/croot/python-split_1694437901252/work/Tools/scripts/deepfreeze.py _bootstrap_python /croot/python-split_1694437901252/work/Programs/_freeze_module.py \"
    DEEPFREEZE_OBJS = "Python/deepfreeze/deepfreeze.o"
    DESTDIRS = "/anaconda/envs/rl4sem /anaconda/envs/rl4sem/lib /anaconda/envs/rl4sem/lib/python3.11 /anaconda/envs/rl4sem/lib/python3.11/lib-dynload"
    DESTLIB = "/anaconda/envs/rl4sem/lib/python3.11"
    DESTPATH = ""
    DESTSHARED = "/anaconda/envs/rl4sem/lib/python3.11/lib-dynload"
    DFLAGS = ""
    DIRMODE = "755"
    DIST = "README.rst ChangeLog configure configure.ac acconfig.h pyconfig.h.in Makefile.pre.in Include Lib Misc Ext-dummy"
    DISTDIRS = "Include Lib Misc Ext-dummy"
    DISTFILES = "README.rst ChangeLog configure configure.ac acconfig.h pyconfig.h.in Makefile.pre.in"
    DLINCLDIR = "."
    DLLLIBRARY = ""
    DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754 = "0"
    DOUBLE_IS_BIG_ENDIAN_IEEE754 = "0"
    DOUBLE_IS_LITTLE_ENDIAN_IEEE754 = "1"
    DTRACE = ""
    DTRACE_DEPS = "\"
    DTRACE_HEADERS = ""
    DTRACE_OBJS = ""
    DYNLOADFILE = "dynload_shlib.o"
    ENABLE_IPV6 = "1"
    ENSUREPIP = "no"
    EXE = ""
    EXEMODE = "755"
    EXPAT_CFLAGS = "-I/croot/python-split_1694437901252/work/Modules/expat"
    EXPAT_LDFLAGS = "-lm Modules/expat/libexpat.a"
    EXPORTSFROM = ""
    EXPORTSYMS = ""
    EXTRATESTOPTS = ""
    EXT_SUFFIX = ".cpython-311-x86_64-linux-gnu.so"
    FILEMODE = "644"
    FLOAT_WORDS_BIGENDIAN = "0"
    FREEZE_MODULE = "./_bootstrap_python /croot/python-split_1694437901252/work/Programs/_freeze_module.py"
    FREEZE_MODULE_BOOTSTRAP = "./Programs/_freeze_module"
    FREEZE_MODULE_BOOTSTRAP_DEPS = "Programs/_freeze_module"
    FREEZE_MODULE_DEPS = "_bootstrap_python /croot/python-split_1694437901252/work/Programs/_freeze_module.py"
    FROZEN_FILES_IN = "\"
    FROZEN_FILES_OUT = "\"
    GETPGRP_HAVE_ARG = "0"
    GITBRANCH = ""
    GITTAG = ""
    GITVERSION = ""
    GNULD = "no"
    HAVE_ACCEPT = "1"
    HAVE_ACCEPT4 = "1"
    HAVE_ACOSH = "1"
    HAVE_ADDRINFO = "1"
    HAVE_ALARM = "1"
    HAVE_ALIGNED_REQUIRED = "0"
    HAVE_ALLOCA_H = "1"
    HAVE_ALTZONE = "0"
    HAVE_ASINH = "1"
    HAVE_ASM_TYPES_H = "1"
    HAVE_ATANH = "1"
    HAVE_BIND = "1"
    HAVE_BIND_TEXTDOMAIN_CODESET = "1"
    HAVE_BLUETOOTH_BLUETOOTH_H = "0"
    HAVE_BLUETOOTH_H = "0"
    HAVE_BROKEN_MBSTOWCS = "0"
    HAVE_BROKEN_NICE = "0"
    HAVE_BROKEN_PIPE_BUF = "0"
    HAVE_BROKEN_POLL = "0"
    HAVE_BROKEN_POSIX_SEMAPHORES = "0"
    HAVE_BROKEN_PTHREAD_SIGMASK = "0"
    HAVE_BROKEN_SEM_GETVALUE = "0"
    HAVE_BROKEN_UNSETENV = "0"
    HAVE_BUILTIN_ATOMIC = "1"
    HAVE_BZLIB_H = "1"
    HAVE_CHFLAGS = "0"
    HAVE_CHMOD = "1"
    HAVE_CHOWN = "1"
    HAVE_CHROOT = "1"
    HAVE_CLOCK = "1"
    HAVE_CLOCK_GETRES = "1"
    HAVE_CLOCK_GETTIME = "1"
    HAVE_CLOCK_NANOSLEEP = "1"
    HAVE_CLOCK_SETTIME = "1"
    HAVE_CLOSE_RANGE = "0"
    HAVE_COMPUTED_GOTOS = "1"
    HAVE_CONFSTR = "1"
    HAVE_CONIO_H = "0"
    HAVE_CONNECT = "1"
    HAVE_COPY_FILE_RANGE = "0"
    HAVE_CRYPT_H = "1"
    HAVE_CRYPT_R = "1"
    HAVE_CTERMID = "1"
    HAVE_CTERMID_R = "0"
    HAVE_CURSES_FILTER = "1"
    HAVE_CURSES_H = "1"
    HAVE_CURSES_HAS_KEY = "1"
    HAVE_CURSES_IMMEDOK = "1"
    HAVE_CURSES_IS_PAD = "1"
    HAVE_CURSES_IS_TERM_RESIZED = "1"
    HAVE_CURSES_RESIZETERM = "1"
    HAVE_CURSES_RESIZE_TERM = "1"
    HAVE_CURSES_SYNCOK = "1"
    HAVE_CURSES_TYPEAHEAD = "1"
    HAVE_CURSES_USE_ENV = "1"
    HAVE_CURSES_WCHGAT = "1"
    HAVE_DB_H = "0"
    HAVE_DECL_RTLD_DEEPBIND = "1"
    HAVE_DECL_RTLD_GLOBAL = "1"
    HAVE_DECL_RTLD_LAZY = "1"
    HAVE_DECL_RTLD_LOCAL = "1"
    HAVE_DECL_RTLD_MEMBER = "0"
    HAVE_DECL_RTLD_NODELETE = "1"
    HAVE_DECL_RTLD_NOLOAD = "1"
    HAVE_DECL_RTLD_NOW = "1"
    HAVE_DECL_TZNAME = "0"
    HAVE_DEVICE_MACROS = "1"
    HAVE_DEV_PTC = "0"
    HAVE_DEV_PTMX = "1"
    HAVE_DIRECT_H = "0"
    HAVE_DIRENT_D_TYPE = "1"
    HAVE_DIRENT_H = "1"
    HAVE_DIRFD = "1"
    HAVE_DLFCN_H = "1"
    HAVE_DLOPEN = "1"
    HAVE_DUP = "1"
    HAVE_DUP2 = "1"
    HAVE_DUP3 = "1"
    HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH = "0"
    HAVE_DYNAMIC_LOADING = "1"
    HAVE_ENDIAN_H = "1"
    HAVE_EPOLL = "1"
    HAVE_EPOLL_CREATE1 = "1"
    HAVE_ERF = "1"
    HAVE_ERFC = "1"
    HAVE_ERRNO_H = "1"
    HAVE_EVENTFD = "1"
    HAVE_EXECV = "1"
    HAVE_EXPLICIT_BZERO = "0"
    HAVE_EXPLICIT_MEMSET = "0"
    HAVE_EXPM1 = "1"
    HAVE_FACCESSAT = "1"
    HAVE_FCHDIR = "1"
    HAVE_FCHMOD = "1"
    HAVE_FCHMODAT = "1"
    HAVE_FCHOWN = "1"
    HAVE_FCHOWNAT = "1"
    HAVE_FCNTL_H = "1"
    HAVE_FDATASYNC = "1"
    HAVE_FDOPENDIR = "1"
    HAVE_FDWALK = "0"
    HAVE_FEXECVE = "1"
    HAVE_FLOCK = "1"
    HAVE_FORK = "1"
    HAVE_FORK1 = "0"
    HAVE_FORKPTY = "1"
    HAVE_FPATHCONF = "1"
    HAVE_FSEEK64 = "0"
    HAVE_FSEEKO = "1"
    HAVE_FSTATAT = "1"
    HAVE_FSTATVFS = "1"
    HAVE_FSYNC = "1"
    HAVE_FTELL64 = "0"
    HAVE_FTELLO = "1"
    HAVE_FTIME = "1"
    HAVE_FTRUNCATE = "1"
    HAVE_FUTIMENS = "1"
    HAVE_FUTIMES = "1"
    HAVE_FUTIMESAT = "1"
    HAVE_GAI_STRERROR = "1"
    HAVE_GCC_ASM_FOR_MC68881 = "0"
    HAVE_GCC_ASM_FOR_X64 = "1"
    HAVE_GCC_ASM_FOR_X87 = "1"
    HAVE_GCC_UINT128_T = "1"
    HAVE_GDBM_DASH_NDBM_H = "0"
    HAVE_GDBM_H = "0"
    HAVE_GDBM_NDBM_H = "0"
    HAVE_GETADDRINFO = "1"
    HAVE_GETC_UNLOCKED = "1"
    HAVE_GETEGID = "1"
    HAVE_GETENTROPY = "0"
    HAVE_GETEUID = "1"
    HAVE_GETGID = "1"
    HAVE_GETGRGID = "1"
    HAVE_GETGRGID_R = "1"
    HAVE_GETGRNAM_R = "1"
    HAVE_GETGROUPLIST = "1"
    HAVE_GETGROUPS = "1"
    HAVE_GETHOSTBYADDR = "1"
    HAVE_GETHOSTBYNAME = "1"
    HAVE_GETHOSTBYNAME_R = "1"
    HAVE_GETHOSTBYNAME_R_3_ARG = "0"
    HAVE_GETHOSTBYNAME_R_5_ARG = "0"
    HAVE_GETHOSTBYNAME_R_6_ARG = "1"
    HAVE_GETHOSTNAME = "1"
    HAVE_GETITIMER = "1"
    HAVE_GETLOADAVG = "1"
    HAVE_GETLOGIN = "1"
    HAVE_GETNAMEINFO = "1"
    HAVE_GETPAGESIZE = "1"
    HAVE_GETPEERNAME = "1"
    HAVE_GETPGID = "1"
    HAVE_GETPGRP = "1"
    HAVE_GETPID = "1"
    HAVE_GETPPID = "1"
    HAVE_GETPRIORITY = "1"
    HAVE_GETPROTOBYNAME = "1"
    HAVE_GETPWENT = "1"
    HAVE_GETPWNAM_R = "1"
    HAVE_GETPWUID = "1"
    HAVE_GETPWUID_R = "1"
    HAVE_GETRANDOM = "0"
    HAVE_GETRANDOM_SYSCALL = "1"
    HAVE_GETRESGID = "1"
    HAVE_GETRESUID = "1"
    HAVE_GETRUSAGE = "1"
    HAVE_GETSERVBYNAME = "1"
    HAVE_GETSERVBYPORT = "1"
    HAVE_GETSID = "1"
    HAVE_GETSOCKNAME = "1"
    HAVE_GETSPENT = "1"
    HAVE_GETSPNAM = "1"
    HAVE_GETUID = "1"
    HAVE_GETWD = "1"
    HAVE_GLIBC_MEMMOVE_BUG = "0"
    HAVE_GRP_H = "1"
    HAVE_HSTRERROR = "1"
    HAVE_HTOLE64 = "1"
    HAVE_IEEEFP_H = "0"
    HAVE_IF_NAMEINDEX = "1"
    HAVE_INET_ATON = "1"
    HAVE_INET_NTOA = "1"
    HAVE_INET_PTON = "1"
    HAVE_INITGROUPS = "1"
    HAVE_INTTYPES_H = "1"
    HAVE_IO_H = "0"
    HAVE_IPA_PURE_CONST_BUG = "0"
    HAVE_KILL = "1"
    HAVE_KILLPG = "1"
    HAVE_KQUEUE = "0"
    HAVE_LANGINFO_H = "1"
    HAVE_LARGEFILE_SUPPORT = "0"
    HAVE_LCHFLAGS = "0"
    HAVE_LCHMOD = "0"
    HAVE_LCHOWN = "1"
    HAVE_LIBB2 = "0"
    HAVE_LIBDB = "0"
    HAVE_LIBDL = "1"
    HAVE_LIBDLD = "0"
    HAVE_LIBGDBM_COMPAT = "0"
    HAVE_LIBIEEE = "0"
    HAVE_LIBINTL_H = "1"
    HAVE_LIBNDBM = "0"
    HAVE_LIBREADLINE = "1"
    HAVE_LIBRESOLV = "0"
    HAVE_LIBSENDFILE = "0"
    HAVE_LIBSQLITE3 = "1"
    HAVE_LIBUTIL_H = "0"
    HAVE_LINK = "1"
    HAVE_LINKAT = "1"
    HAVE_LINUX_AUXVEC_H = "1"
    HAVE_LINUX_CAN_BCM_H = "1"
    HAVE_LINUX_CAN_H = "1"
    HAVE_LINUX_CAN_J1939_H = "0"
    HAVE_LINUX_CAN_RAW_FD_FRAMES = "1"
    HAVE_LINUX_CAN_RAW_H = "1"
    HAVE_LINUX_CAN_RAW_JOIN_FILTERS = "1"
    HAVE_LINUX_LIMITS_H = "1"
    HAVE_LINUX_MEMFD_H = "1"
    HAVE_LINUX_NETLINK_H = "1"
    HAVE_LINUX_QRTR_H = "0"
    HAVE_LINUX_RANDOM_H = "1"
    HAVE_LINUX_SOUNDCARD_H = "1"
    HAVE_LINUX_TIPC_H = "1"
    HAVE_LINUX_VM_SOCKETS_H = "1"
    HAVE_LINUX_WAIT_H = "1"
    HAVE_LISTEN = "1"
    HAVE_LOCKF = "1"
    HAVE_LOG1P = "1"
    HAVE_LOG2 = "1"
    HAVE_LOGIN_TTY = "1"
    HAVE_LONG_DOUBLE = "1"
    HAVE_LSTAT = "1"
    HAVE_LUTIMES = "1"
    HAVE_LZMA_H = "0"
    HAVE_MADVISE = "1"
    HAVE_MAKEDEV = "1"
    HAVE_MBRTOWC = "1"
    HAVE_MEMFD_CREATE = "0"
    HAVE_MEMORY_H = "1"
    HAVE_MEMRCHR = "1"
    HAVE_MKDIRAT = "1"
    HAVE_MKFIFO = "1"
    HAVE_MKFIFOAT = "1"
    HAVE_MKNOD = "1"
    HAVE_MKNODAT = "1"
    HAVE_MKTIME = "1"
    HAVE_MMAP = "1"
    HAVE_MREMAP = "1"
    HAVE_NANOSLEEP = "1"
    HAVE_NCURSES_H = "1"
    HAVE_NDBM_H = "0"
    HAVE_NDIR_H = "0"
    HAVE_NETCAN_CAN_H = "0"
    HAVE_NETDB_H = "1"
    HAVE_NETINET_IN_H = "1"
    HAVE_NETPACKET_PACKET_H = "1"
    HAVE_NET_IF_H = "1"
    HAVE_NICE = "1"
    HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION = "0"
    HAVE_OPENAT = "1"
    HAVE_OPENDIR = "1"
    HAVE_OPENPTY = "1"
    HAVE_PATHCONF = "1"
    HAVE_PAUSE = "1"
    HAVE_PIPE = "1"
    HAVE_PIPE2 = "1"
    HAVE_PLOCK = "0"
    HAVE_POLL = "1"
    HAVE_POLL_H = "1"
    HAVE_POSIX_FADVISE = "1"
    HAVE_POSIX_FALLOCATE = "1"
    HAVE_POSIX_SPAWN = "1"
    HAVE_POSIX_SPAWNP = "1"
    HAVE_PREAD = "1"
    HAVE_PREADV = "1"
    HAVE_PREADV2 = "0"
    HAVE_PRLIMIT = "1"
    HAVE_PROCESS_H = "0"
    HAVE_PROTOTYPES = "1"
    HAVE_PTHREAD_CONDATTR_SETCLOCK = "1"
    HAVE_PTHREAD_DESTRUCTOR = "0"
    HAVE_PTHREAD_GETCPUCLOCKID = "1"
    HAVE_PTHREAD_H = "1"
    HAVE_PTHREAD_INIT = "0"
    HAVE_PTHREAD_KILL = "1"
    HAVE_PTHREAD_SIGMASK = "1"
    HAVE_PTHREAD_STUBS = "0"
    HAVE_PTY_H = "1"
    HAVE_PWRITE = "1"
    HAVE_PWRITEV = "1"
    HAVE_PWRITEV2 = "0"
    HAVE_READLINK = "1"
    HAVE_READLINKAT = "1"
    HAVE_READV = "1"
    HAVE_REALPATH = "1"
    HAVE_RECVFROM = "1"
    HAVE_RENAMEAT = "1"
    HAVE_RL_APPEND_HISTORY = "1"
    HAVE_RL_CATCH_SIGNAL = "1"
    HAVE_RL_COMPLETION_APPEND_CHARACTER = "1"
    HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK = "1"
    HAVE_RL_COMPLETION_MATCHES = "1"
    HAVE_RL_COMPLETION_SUPPRESS_APPEND = "1"
    HAVE_RL_PRE_INPUT_HOOK = "1"
    HAVE_RL_RESIZE_TERMINAL = "1"
    HAVE_RPC_RPC_H = "1"
    HAVE_RTPSPAWN = "0"
    HAVE_SCHED_GET_PRIORITY_MAX = "1"
    HAVE_SCHED_H = "1"
    HAVE_SCHED_RR_GET_INTERVAL = "1"
    HAVE_SCHED_SETAFFINITY = "1"
    HAVE_SCHED_SETPARAM = "1"
    HAVE_SCHED_SETSCHEDULER = "1"
    HAVE_SEM_CLOCKWAIT = "0"
    HAVE_SEM_GETVALUE = "1"
    HAVE_SEM_OPEN = "1"
    HAVE_SEM_TIMEDWAIT = "1"
    HAVE_SEM_UNLINK = "1"
    HAVE_SENDFILE = "1"
    HAVE_SENDTO = "1"
    HAVE_SETEGID = "1"
    HAVE_SETEUID = "1"
    HAVE_SETGID = "1"
    HAVE_SETGROUPS = "1"
    HAVE_SETHOSTNAME = "1"
    HAVE_SETITIMER = "1"
    HAVE_SETJMP_H = "1"
    HAVE_SETLOCALE = "1"
    HAVE_SETPGID = "1"
    HAVE_SETPGRP = "1"
    HAVE_SETPRIORITY = "1"
    HAVE_SETREGID = "1"
    HAVE_SETRESGID = "1"
    HAVE_SETRESUID = "1"
    HAVE_SETREUID = "1"
    HAVE_SETSID = "1"
    HAVE_SETSOCKOPT = "1"
    HAVE_SETUID = "1"
    HAVE_SETVBUF = "1"
    HAVE_SHADOW_H = "1"
    HAVE_SHM_OPEN = "1"
    HAVE_SHM_UNLINK = "1"
    HAVE_SHUTDOWN = "1"
    HAVE_SIGACTION = "1"
    HAVE_SIGALTSTACK = "1"
    HAVE_SIGFILLSET = "1"
    HAVE_SIGINFO_T_SI_BAND = "1"
    HAVE_SIGINTERRUPT = "1"
    HAVE_SIGNAL_H = "1"
    HAVE_SIGPENDING = "1"
    HAVE_SIGRELSE = "1"
    HAVE_SIGTIMEDWAIT = "1"
    HAVE_SIGWAIT = "1"
    HAVE_SIGWAITINFO = "1"
    HAVE_SNPRINTF = "1"
    HAVE_SOCKADDR_ALG = "1"
    HAVE_SOCKADDR_SA_LEN = "0"
    HAVE_SOCKADDR_STORAGE = "1"
    HAVE_SOCKET = "1"
    HAVE_SOCKETPAIR = "1"
    HAVE_SPAWN_H = "1"
    HAVE_SPLICE = "1"
    HAVE_SSIZE_T = "1"
    HAVE_STATVFS = "1"
    HAVE_STAT_TV_NSEC = "1"
    HAVE_STAT_TV_NSEC2 = "0"
    HAVE_STDARG_PROTOTYPES = "1"
    HAVE_STDINT_H = "1"
    HAVE_STDLIB_H = "1"
    HAVE_STD_ATOMIC = "1"
    HAVE_STRFTIME = "1"
    HAVE_STRINGS_H = "1"
    HAVE_STRING_H = "1"
    HAVE_STRLCPY = "0"
    HAVE_STROPTS_H = "0"
    HAVE_STRSIGNAL = "1"
    HAVE_STRUCT_PASSWD_PW_GECOS = "1"
    HAVE_STRUCT_PASSWD_PW_PASSWD = "1"
    HAVE_STRUCT_STAT_ST_BIRTHTIME = "0"
    HAVE_STRUCT_STAT_ST_BLKSIZE = "1"
    HAVE_STRUCT_STAT_ST_BLOCKS = "1"
    HAVE_STRUCT_STAT_ST_FLAGS = "0"
    HAVE_STRUCT_STAT_ST_GEN = "0"
    HAVE_STRUCT_STAT_ST_RDEV = "1"
    HAVE_STRUCT_TM_TM_ZONE = "1"
    HAVE_SYMLINK = "1"
    HAVE_SYMLINKAT = "1"
    HAVE_SYNC = "1"
    HAVE_SYSCONF = "1"
    HAVE_SYSEXITS_H = "1"
    HAVE_SYSLOG_H = "1"
    HAVE_SYSTEM = "1"
    HAVE_SYS_AUDIOIO_H = "0"
    HAVE_SYS_AUXV_H = "1"
    HAVE_SYS_BSDTTY_H = "0"
    HAVE_SYS_DEVPOLL_H = "0"
    HAVE_SYS_DIR_H = "0"
    HAVE_SYS_ENDIAN_H = "0"
    HAVE_SYS_EPOLL_H = "1"
    HAVE_SYS_EVENTFD_H = "1"
    HAVE_SYS_EVENT_H = "0"
    HAVE_SYS_FILE_H = "1"
    HAVE_SYS_IOCTL_H = "1"
    HAVE_SYS_KERN_CONTROL_H = "0"
    HAVE_SYS_LOADAVG_H = "0"
    HAVE_SYS_LOCK_H = "0"
    HAVE_SYS_MEMFD_H = "0"
    HAVE_SYS_MKDEV_H = "0"
    HAVE_SYS_MMAN_H = "1"
    HAVE_SYS_MODEM_H = "0"
    HAVE_SYS_NDIR_H = "0"
    HAVE_SYS_PARAM_H = "1"
    HAVE_SYS_POLL_H = "1"
    HAVE_SYS_RANDOM_H = "0"
    HAVE_SYS_RESOURCE_H = "1"
    HAVE_SYS_SELECT_H = "1"
    HAVE_SYS_SENDFILE_H = "1"
    HAVE_SYS_SOCKET_H = "1"
    HAVE_SYS_SOUNDCARD_H = "1"
    HAVE_SYS_STATVFS_H = "1"
    HAVE_SYS_STAT_H = "1"
    HAVE_SYS_SYSCALL_H = "1"
    HAVE_SYS_SYSMACROS_H = "1"
    HAVE_SYS_SYS_DOMAIN_H = "0"
    HAVE_SYS_TERMIO_H = "0"
    HAVE_SYS_TIMES_H = "1"
    HAVE_SYS_TIME_H = "1"
    HAVE_SYS_TYPES_H = "1"
    HAVE_SYS_UIO_H = "1"
    HAVE_SYS_UN_H = "1"
    HAVE_SYS_UTSNAME_H = "1"
    HAVE_SYS_WAIT_H = "1"
    HAVE_SYS_XATTR_H = "1"
    HAVE_TCGETPGRP = "1"
    HAVE_TCSETPGRP = "1"
    HAVE_TEMPNAM = "1"
    HAVE_TERMIOS_H = "1"
    HAVE_TERM_H = "1"
    HAVE_TIMEGM = "1"
    HAVE_TIMES = "1"
    HAVE_TMPFILE = "1"
    HAVE_TMPNAM = "1"
    HAVE_TMPNAM_R = "1"
    HAVE_TM_ZONE = "1"
    HAVE_TRUNCATE = "1"
    HAVE_TTYNAME = "1"
    HAVE_TZNAME = "0"
    HAVE_UMASK = "1"
    HAVE_UNAME = "1"
    HAVE_UNISTD_H = "1"
    HAVE_UNLINKAT = "1"
    HAVE_USABLE_WCHAR_T = "0"
    HAVE_UTIL_H = "0"
    HAVE_UTIMENSAT = "1"
    HAVE_UTIMES = "1"
    HAVE_UTIME_H = "1"
    HAVE_UTMP_H = "1"
    HAVE_UUID_CREATE = "0"
    HAVE_UUID_ENC_BE = "0"
    HAVE_UUID_GENERATE_TIME_SAFE = "1"
    HAVE_UUID_H = "1"
    HAVE_UUID_UUID_H = "0"
    HAVE_VFORK = "1"
    HAVE_WAIT = "1"
    HAVE_WAIT3 = "1"
    HAVE_WAIT4 = "1"
    HAVE_WAITID = "1"
    HAVE_WAITPID = "1"
    HAVE_WCHAR_H = "1"
    HAVE_WCSCOLL = "1"
    HAVE_WCSFTIME = "1"
    HAVE_WCSXFRM = "1"
    HAVE_WMEMCMP = "1"
    HAVE_WORKING_TZSET = "1"
    HAVE_WRITEV = "1"
    HAVE_ZLIB_COPY = "1"
    HAVE_ZLIB_H = "0"
    HAVE__GETPTY = "0"
    HOSTRUNNER = ""
    HOST_GNU_TYPE = "x86_64-conda_cos6-linux-gnu"
    INCLDIRSTOMAKE = "/anaconda/envs/rl4sem/include /anaconda/envs/rl4sem/include /anaconda/envs/rl4sem/include/python3.11 /anaconda/envs/rl4sem/include/python3.11"
    INCLUDEDIR = "/anaconda/envs/rl4sem/include"
    INCLUDEPY = "/anaconda/envs/rl4sem/include/python3.11"
    INSTALL = "/usr/bin/install -c"
    INSTALL_DATA = "/usr/bin/install -c -m 644"
    INSTALL_PROGRAM = "/usr/bin/install -c"
    INSTALL_SCRIPT = "/usr/bin/install -c"
    INSTALL_SHARED = "/usr/bin/install -c -m 755"
    INSTSONAME = "libpython3.11.a"
    IO_H = "Modules/_io/_iomodule.h"
    IO_OBJS = "\"
    LDCXXSHARED = "g++ -pthread -B /anaconda/envs/rl4sem/compiler_compat -shared"
    LDFLAGS = "-Wl,-rpath,/anaconda/envs/rl4sem/lib -Wl,-rpath-link,/anaconda/envs/rl4sem/lib -L/anaconda/envs/rl4sem/lib -Wl,-rpath,/anaconda/envs/rl4sem/lib -Wl,-rpath-link,/anaconda/envs/rl4sem/lib -L/anaconda/envs/rl4sem/lib"
    LDLIBRARY = "libpython3.11.a"
    LDLIBRARYDIR = ""
    LDSHARED = "gcc -pthread -B /anaconda/envs/rl4sem/compiler_compat -shared  -Wl,-rpath,/anaconda/envs/rl4sem/lib -Wl,-rpath-link,/anaconda/envs/rl4sem/lib -L/anaconda/envs/rl4sem/lib -Wl,-rpath,/anaconda/envs/rl4sem/lib -Wl,-rpath-link,/anaconda/envs/rl4sem/lib -L/anaconda/envs/rl4sem/lib"
    LDVERSION = "3.11"
    LIBC = ""
    LIBDEST = "/anaconda/envs/rl4sem/lib/python3.11"
    LIBDIR = "/anaconda/envs/rl4sem/lib"
    LIBEXPAT_A = "Modules/expat/libexpat.a"
    LIBEXPAT_CFLAGS = "-I/croot/python-split_1694437901252/work/Modules/expat -DNDEBUG -fwrapv -O2 -Wall   -fPIC   -O2   -isystem /anaconda/envs/rl4sem/include -fPIC   -O2   -isystem /anaconda/envs/rl4sem/include -fno-semantic-interposition -g -std=c11 -Werror=implicit-function-declaration -fvisibility=hidden -I/croot/python-split_1694437901252/work/Include/internal -IObjects -IInclude -IPython -I. -I/croot/python-split_1694437901252/work/Include -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /anaconda/envs/rl4sem/include -I/anaconda/envs/rl4sem/include -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /anaconda/envs/rl4sem/include -I/anaconda/envs/rl4sem/include -fPIC"
    LIBEXPAT_HEADERS = "\"
    LIBEXPAT_OBJS = "\"
    LIBFFI_INCLUDEDIR = "/anaconda/envs/rl4sem/include"
    LIBM = "-lm"
    LIBMPDEC_A = "Modules/_decimal/libmpdec/libmpdec.a"
    LIBMPDEC_CFLAGS = "-I/croot/python-split_1694437901252/work/Modules/_decimal/libmpdec -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1 -DNDEBUG -fwrapv -O2 -Wall   -fPIC   -O2   -isystem /anaconda/envs/rl4sem/include -fPIC   -O2   -isystem /anaconda/envs/rl4sem/include -fno-semantic-interposition -g -std=c11 -Werror=implicit-function-declaration -fvisibility=hidden -I/croot/python-split_1694437901252/work/Include/internal -IObjects -IInclude -IPython -I. -I/croot/python-split_1694437901252/work/Include -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /anaconda/envs/rl4sem/include -I/anaconda/envs/rl4sem/include -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /anaconda/envs/rl4sem/include -I/anaconda/envs/rl4sem/include -fPIC"
    LIBMPDEC_HEADERS = "\"
    LIBMPDEC_OBJS = "\"
    LIBOBJDIR = "Python/"
    LIBOBJS = ""
    LIBPC = "/anaconda/envs/rl4sem/lib/pkgconfig"
    LIBPL = "/anaconda/envs/rl4sem/lib/python3.11/config-3.11-x86_64-linux-gnu"
    LIBPYTHON = ""
    LIBRARY = "libpython3.11.a"
    LIBRARY_DEPS = "libpython3.11.a"
    LIBRARY_OBJS = "\"
    LIBRARY_OBJS_OMIT_FROZEN = "\"
    LIBS = "-lpthread -ldl  -lutil"
    LIBSUBDIRS = "asyncio \"
    LINKCC = "gcc -pthread -B /anaconda/envs/rl4sem/compiler_compat"
    LINKFORSHARED = "-Xlinker -export-dynamic"
    LINK_PYTHON_DEPS = "libpython3.11.a"
    LINK_PYTHON_OBJS = "\"
    LIPO_32BIT_FLAGS = ""
    LIPO_INTEL64_FLAGS = ""
    LLVM_PROF_ERR = "no"
    LLVM_PROF_FILE = ""
    LLVM_PROF_MERGER = "true"
    LN = "ln"
    LOCALMODLIBS = ""
    MACHDEP = "linux"
    MACHDEP_OBJS = ""
    MACHDESTLIB = "/anaconda/envs/rl4sem/lib/python3.11"
    MACOSX_DEPLOYMENT_TARGET = ""
    MAINCC = "gcc -pthread -B /anaconda/envs/rl4sem/compiler_compat"
    MAJOR_IN_MKDEV = "0"
    MAJOR_IN_SYSMACROS = "0"
    MAKESETUP = "/croot/python-split_1694437901252/work/Modules/makesetup"
    MANDIR = "/anaconda/envs/rl4sem/share/man"
    MKDIR_P = "/usr/bin/mkdir -p"
    MODBUILT_NAMES = "atexit  faulthandler  posix  _signal  _tracemalloc  _codecs  _collections  errno  _io  itertools  _sre  _thread  time  _weakref  _abc  _functools  _locale  _operator  _stat  _symtable  pwd  xxsubtype"
    MODDISABLED_NAMES = ""
    MODLIBS = ""
    MODOBJS = "Modules/atexitmodule.o  Modules/faulthandler.o  Modules/posixmodule.o  Modules/signalmodule.o  Modules/_tracemalloc.o  Modules/_codecsmodule.o  Modules/_collectionsmodule.o  Modules/errnomodule.o  Modules/_io/_iomodule.o Modules/_io/iobase.o Modules/_io/fileio.o Modules/_io/bytesio.o Modules/_io/bufferedio.o Modules/_io/textio.o Modules/_io/stringio.o  Modules/itertoolsmodule.o  Modules/_sre/sre.o  Modules/_threadmodule.o  Modules/timemodule.o  Modules/_weakref.o  Modules/_abc.o  Modules/_functoolsmodule.o  Modules/_localemodule.o  Modules/_operator.o  Modules/_stat.o  Modules/symtablemodule.o  Modules/pwdmodule.o  Modules/xxsubtype.o"
    MODSHARED_NAMES = ""
    MODULE_ARRAY_STATE = "yes"
    MODULE_ATEXIT_LDFLAGS = ""
    MODULE_AUDIOOP_LDFLAGS = "-lm"
    MODULE_AUDIOOP_STATE = "yes"
    MODULE_BINASCII_CFLAGS = "-DUSE_ZLIB_CRC32 -I/anaconda/envs/rl4sem/include"
    MODULE_BINASCII_LDFLAGS = "-L/anaconda/envs/rl4sem/lib -lz"
    MODULE_BINASCII_STATE = "yes"
    MODULE_CMATH_DEPS = "/croot/python-split_1694437901252/work/Modules/_math.h"
    MODULE_CMATH_LDFLAGS = "-lm"
    MODULE_CMATH_STATE = "yes"
    MODULE_ERRNO_LDFLAGS = ""
    MODULE_FAULTHANDLER_LDFLAGS = ""
    MODULE_FCNTL_LDFLAGS = ""
    MODULE_FCNTL_STATE = "yes"
    MODULE_GRP_STATE = "yes"
    MODULE_ITERTOOLS_LDFLAGS = ""
    MODULE_MATH_DEPS = "/croot/python-split_1694437901252/work/Modules/_math.h"
    MODULE_MATH_LDFLAGS = "-lm"
    MODULE_MATH_STATE = "yes"
    MODULE_MMAP_STATE = "yes"
    MODULE_NIS_CFLAGS = ""
    MODULE_NIS_LDFLAGS = "-lnsl"
    MODULE_NIS_STATE = "yes"
    MODULE_OBJS = "\"
    MODULE_OSSAUDIODEV_LDFLAGS = ""
    MODULE_OSSAUDIODEV_STATE = "yes"
    MODULE_POSIX_LDFLAGS = ""
    MODULE_PWD_LDFLAGS = ""
    MODULE_PWD_STATE = "yes"
    MODULE_PYEXPAT_CFLAGS = "-I/croot/python-split_1694437901252/work/Modules/expat"
    MODULE_PYEXPAT_DEPS = "\ Modules/expat/libexpat.a"
    MODULE_PYEXPAT_LDFLAGS = "-lm Modules/expat/libexpat.a"
    MODULE_PYEXPAT_STATE = "yes"
    MODULE_RESOURCE_STATE = "yes"
    MODULE_SELECT_STATE = "yes"
    MODULE_SPWD_STATE = "yes"
    MODULE_SYSLOG_STATE = "yes"
    MODULE_TERMIOS_STATE = "yes"
    MODULE_TIME_LDFLAGS = ""
    MODULE_TIME_STATE = "yes"
    MODULE_UNICODEDATA_DEPS = "/croot/python-split_1694437901252/work/Modules/unicodedata_db.h /croot/python-split_1694437901252/work/Modules/unicodename_db.h"
    MODULE_UNICODEDATA_STATE = "yes"
    MODULE_XXLIMITED_35_STATE = "yes"
    MODULE_XXLIMITED_STATE = "yes"
    MODULE_XXSUBTYPE_LDFLAGS = ""
    MODULE_ZLIB_CFLAGS = "-I/anaconda/envs/rl4sem/include"
    MODULE_ZLIB_LDFLAGS = "-L/anaconda/envs/rl4sem/lib -lz"
    MODULE_ZLIB_STATE = "yes"
    MODULE__ABC_LDFLAGS = ""
    MODULE__ASYNCIO_STATE = "yes"
    MODULE__BISECT_STATE = "yes"
    MODULE__BLAKE2_CFLAGS = ""
    MODULE__BLAKE2_DEPS = "/croot/python-split_1694437901252/work/Modules/_blake2/impl/blake2-config.h /croot/python-split_1694437901252/work/Modules/_blake2/impl/blake2-impl.h /croot/python-split_1694437901252/work/Modules/_blake2/impl/blake2.h /croot/python-split_1694437901252/work/Modules/_blake2/impl/blake2b-load-sse2.h /croot/python-split_1694437901252/work/Modules/_blake2/impl/blake2b-load-sse41.h /croot/python-split_1694437901252/work/Modules/_blake2/impl/blake2b-ref.c /croot/python-split_1694437901252/work/Modules/_blake2/impl/blake2b-round.h /croot/python-split_1694437901252/work/Modules/_blake2/impl/blake2b.c /croot/python-split_1694437901252/work/Modules/_blake2/impl/blake2s-load-sse2.h /croot/python-split_1694437901252/work/Modules/_blake2/impl/blake2s-load-sse41.h /croot/python-split_1694437901252/work/Modules/_blake2/impl/blake2s-load-xop.h /croot/python-split_1694437901252/work/Modules/_blake2/impl/blake2s-ref.c /croot/python-split_1694437901252/work/Modules/_blake2/impl/blake2s-round.h /croot/python-split_1694437901252/work/Modules/_blake2/impl/blake2s.c /croot/python-split_1694437901252/work/Modules/_blake2/blake2module.h /croot/python-split_1694437901252/work/Modules/hashlib.h"
    MODULE__BLAKE2_LDFLAGS = ""
    MODULE__BLAKE2_STATE = "yes"
    MODULE__BZ2_CFLAGS = ""
    MODULE__BZ2_LDFLAGS = "-lbz2"
    MODULE__BZ2_STATE = "yes"
    MODULE__CODECS_CN_STATE = "yes"
    MODULE__CODECS_HK_STATE = "yes"
    MODULE__CODECS_ISO2022_STATE = "yes"
    MODULE__CODECS_JP_STATE = "yes"
    MODULE__CODECS_KR_STATE = "yes"
    MODULE__CODECS_LDFLAGS = ""
    MODULE__CODECS_TW_STATE = "yes"
    MODULE__COLLECTIONS_LDFLAGS = ""
    MODULE__CONTEXTVARS_STATE = "yes"
    MODULE__CRYPT_CFLAGS = ""
    MODULE__CRYPT_LDFLAGS = "-lcrypt"
    MODULE__CRYPT_STATE = "yes"
    MODULE__CSV_STATE = "yes"
    MODULE__CTYPES_DEPS = "/croot/python-split_1694437901252/work/Modules/_ctypes/ctypes.h"
    MODULE__CTYPES_TEST_LDFLAGS = "-lm"
    MODULE__CTYPES_TEST_STATE = "yes"
    MODULE__DATETIME_LDFLAGS = "-lm"
    MODULE__DATETIME_STATE = "yes"
    MODULE__DECIMAL_CFLAGS = "-I/croot/python-split_1694437901252/work/Modules/_decimal/libmpdec -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1"
    MODULE__DECIMAL_DEPS = "/croot/python-split_1694437901252/work/Modules/_decimal/docstrings.h \ Modules/_decimal/libmpdec/libmpdec.a"
    MODULE__DECIMAL_LDFLAGS = "-lm Modules/_decimal/libmpdec/libmpdec.a"
    MODULE__DECIMAL_STATE = "yes"
    MODULE__ELEMENTTREE_CFLAGS = "-I/croot/python-split_1694437901252/work/Modules/expat"
    MODULE__ELEMENTTREE_DEPS = "/croot/python-split_1694437901252/work/Modules/pyexpat.c \ Modules/expat/libexpat.a"
    MODULE__ELEMENTTREE_STATE = "yes"
    MODULE__FUNCTOOLS_LDFLAGS = ""
    MODULE__GDBM_STATE = "missing"
    MODULE__HASHLIB_CFLAGS = "-I/anaconda/envs/rl4sem/include"
    MODULE__HASHLIB_DEPS = "/croot/python-split_1694437901252/work/Modules/hashlib.h"
    MODULE__HASHLIB_LDFLAGS = "-L/anaconda/envs/rl4sem/lib   -lcrypto"
    MODULE__HASHLIB_STATE = "yes"
    MODULE__HEAPQ_STATE = "yes"
    MODULE__IO_CFLAGS = "-I/croot/python-split_1694437901252/work/Modules/_io"
    MODULE__IO_DEPS = "/croot/python-split_1694437901252/work/Modules/_io/_iomodule.h"
    MODULE__IO_LDFLAGS = ""
    MODULE__IO_STATE = "yes"
    MODULE__JSON_STATE = "yes"
    MODULE__LOCALE_LDFLAGS = ""
    MODULE__LSPROF_STATE = "yes"
    MODULE__LZMA_CFLAGS = "-I/anaconda/envs/rl4sem/include"
    MODULE__LZMA_LDFLAGS = "-L/anaconda/envs/rl4sem/lib -llzma"
    MODULE__LZMA_STATE = "yes"
    MODULE__MD5_DEPS = "/croot/python-split_1694437901252/work/Modules/hashlib.h"
    MODULE__MD5_STATE = "yes"
    MODULE__MULTIBYTECODEC_STATE = "yes"
    MODULE__MULTIPROCESSING_CFLAGS = "-I/croot/python-split_1694437901252/work/Modules/_multiprocessing"
    MODULE__MULTIPROCESSING_STATE = "yes"
    MODULE__OPCODE_STATE = "yes"
    MODULE__OPERATOR_LDFLAGS = ""
    MODULE__PICKLE_STATE = "yes"
    MODULE__POSIXSHMEM_CFLAGS = "-I/croot/python-split_1694437901252/work/Modules/_multiprocessing"
    MODULE__POSIXSHMEM_LDFLAGS = "-lrt"
    MODULE__POSIXSHMEM_STATE = "yes"
    MODULE__POSIXSUBPROCESS_STATE = "yes"
    MODULE__QUEUE_STATE = "yes"
    MODULE__RANDOM_STATE = "yes"
    MODULE__SCPROXY_STATE = "n/a"
    MODULE__SHA1_DEPS = "/croot/python-split_1694437901252/work/Modules/hashlib.h"
    MODULE__SHA1_STATE = "yes"
    MODULE__SHA256_DEPS = "/croot/python-split_1694437901252/work/Modules/hashlib.h"
    MODULE__SHA256_STATE = "yes"
    MODULE__SHA3_DEPS = "/croot/python-split_1694437901252/work/Modules/_sha3/sha3.c /croot/python-split_1694437901252/work/Modules/_sha3/sha3.h /croot/python-split_1694437901252/work/Modules/hashlib.h"
    MODULE__SHA3_STATE = "yes"
    MODULE__SHA512_DEPS = "/croot/python-split_1694437901252/work/Modules/hashlib.h"
    MODULE__SHA512_STATE = "yes"
    MODULE__SIGNAL_LDFLAGS = ""
    MODULE__SOCKET_DEPS = "/croot/python-split_1694437901252/work/Modules/socketmodule.h /croot/python-split_1694437901252/work/Modules/addrinfo.h /croot/python-split_1694437901252/work/Modules/getaddrinfo.c /croot/python-split_1694437901252/work/Modules/getnameinfo.c"
    MODULE__SOCKET_STATE = "yes"
    MODULE__SQLITE3_CFLAGS = "-I/anaconda/envs/rl4sem/include -I/croot/python-split_1694437901252/work/Modules/_sqlite"
    MODULE__SQLITE3_DEPS = "/croot/python-split_1694437901252/work/Modules/_sqlite/connection.h /croot/python-split_1694437901252/work/Modules/_sqlite/cursor.h /croot/python-split_1694437901252/work/Modules/_sqlite/microprotocols.h /croot/python-split_1694437901252/work/Modules/_sqlite/module.h /croot/python-split_1694437901252/work/Modules/_sqlite/prepare_protocol.h /croot/python-split_1694437901252/work/Modules/_sqlite/row.h /croot/python-split_1694437901252/work/Modules/_sqlite/util.h"
    MODULE__SQLITE3_LDFLAGS = "-L/anaconda/envs/rl4sem/lib -lsqlite3"
    MODULE__SQLITE3_STATE = "yes"
    MODULE__SRE_LDFLAGS = ""
    MODULE__SSL_CFLAGS = "-I/anaconda/envs/rl4sem/include"
    MODULE__SSL_DEPS = "/croot/python-split_1694437901252/work/Modules/_ssl.h /croot/python-split_1694437901252/work/Modules/_ssl/cert.c /croot/python-split_1694437901252/work/Modules/_ssl/debughelpers.c /croot/python-split_1694437901252/work/Modules/_ssl/misc.c /croot/python-split_1694437901252/work/Modules/_ssl_data.h /croot/python-split_1694437901252/work/Modules/_ssl_data_111.h /croot/python-split_1694437901252/work/Modules/_ssl_data_300.h /croot/python-split_1694437901252/work/Modules/socketmodule.h"
    MODULE__SSL_LDFLAGS = "-L/anaconda/envs/rl4sem/lib  -lssl -lcrypto"
    MODULE__SSL_STATE = "yes"
    MODULE__STATISTICS_LDFLAGS = "-lm"
    MODULE__STATISTICS_STATE = "yes"
    MODULE__STAT_LDFLAGS = ""
    MODULE__STRUCT_STATE = "yes"
    MODULE__SYMTABLE_LDFLAGS = ""
    MODULE__TESTBUFFER_STATE = "yes"
    MODULE__TESTCAPI_DEPS = "/croot/python-split_1694437901252/work/Modules/testcapi_long.h"
    MODULE__TESTCAPI_STATE = "yes"
    MODULE__TESTCLINIC_STATE = "yes"
    MODULE__TESTIMPORTMULTIPLE_STATE = "yes"
    MODULE__TESTINTERNALCAPI_STATE = "yes"
    MODULE__TESTMULTIPHASE_STATE = "yes"
    MODULE__THREAD_LDFLAGS = ""
    MODULE__TKINTER_CFLAGS = "-I/anaconda/envs/rl4sem/include -Wno-strict-prototypes -DWITH_APPINIT=1"
    MODULE__TKINTER_LDFLAGS = "-L/anaconda/envs/rl4sem/lib -ltk8.6 -ltkstub8.6 -ltcl8.6 -ltclstub8.6"
    MODULE__TKINTER_STATE = "yes"
    MODULE__TRACEMALLOC_LDFLAGS = ""
    MODULE__TYPING_STATE = "yes"
    MODULE__UUID_CFLAGS = "-I/anaconda/envs/rl4sem/include/uuid"
    MODULE__UUID_LDFLAGS = "-L/anaconda/envs/rl4sem/lib -luuid"
    MODULE__UUID_STATE = "yes"
    MODULE__WEAKREF_LDFLAGS = ""
    MODULE__XXSUBINTERPRETERS_STATE = "yes"
    MODULE__XXTESTFUZZ_STATE = "yes"
    MODULE__ZONEINFO_STATE = "yes"
    MULTIARCH = "x86_64-linux-gnu"
    MULTIARCH_CPPFLAGS = "-DMULTIARCH=\"x86_64-linux-gnu\""
    MVWDELCH_IS_EXPRESSION = "1"
    NO_AS_NEEDED = "-Wl,--no-as-needed"
    OBJECT_OBJS = "\"
    OPENSSL_INCLUDES = "-I/anaconda/envs/rl4sem/include"
    OPENSSL_LDFLAGS = "-L/anaconda/envs/rl4sem/lib"
    OPENSSL_LIBS = "-lssl -lcrypto"
    OPENSSL_RPATH = ""
    OPT = "-DNDEBUG -fwrapv -O2 -Wall"
    OTHER_LIBTOOL_OPT = ""
    PACKAGE_BUGREPORT = "0"
    PACKAGE_NAME = "0"
    PACKAGE_STRING = "0"
    PACKAGE_TARNAME = "0"
    PACKAGE_URL = "0"
    PACKAGE_VERSION = "0"
    PARSER_HEADERS = "\"
    PARSER_OBJS = "\ \ Parser/myreadline.o Parser/tokenizer.o"
    PEGEN_HEADERS = "\"
    PEGEN_OBJS = "\"
    PGO_PROF_GEN_FLAG = "-fprofile-generate"
    PGO_PROF_USE_FLAG = ""
    PLATLIBDIR = "lib"
    POBJS = "\"
    POSIX_SEMAPHORES_NOT_ENABLED = "0"
    PROFILE_TASK = "-m test --pgo"
    PTHREAD_KEY_T_IS_COMPATIBLE_WITH_INT = "1"
    PTHREAD_SYSTEM_SCHED_SUPPORTED = "1"
    PURIFY = ""
    PY3LIBRARY = ""
    PYLONG_BITS_IN_DIGIT = "0"
    PYTHON = "python"
    PYTHONFRAMEWORK = ""
    PYTHONFRAMEWORKDIR = "no-framework"
    PYTHONFRAMEWORKINSTALLDIR = ""
    PYTHONFRAMEWORKPREFIX = ""
    PYTHONPATH = ""
    PYTHON_FOR_BUILD = "./python -E"
    PYTHON_FOR_BUILD_DEPS = "python"
    PYTHON_FOR_FREEZE = "./_bootstrap_python"
    PYTHON_FOR_REGEN = ""
    PYTHON_HEADERS = "\"
    PYTHON_OBJS = "\"
    PY_BUILTIN_HASHLIB_HASHES = ""md5,sha1,sha256,sha512,sha3,blake2""
    PY_BUILTIN_MODULE_CFLAGS = "-DNDEBUG -fwrapv -O2 -Wall  -fPIC -O2 -isystem /anaconda/envs/rl4sem/include -fPIC -O2 -isystem /anaconda/envs/rl4sem/include -fno-semantic-interposition  -g -std=c11 -Werror=implicit-function-declaration -fvisibility=hidden  -I/croot/python-split_1694437901252/work/Include/internal -IObjects -IInclude -IPython -I. -I/croot/python-split_1694437901252/work/Include -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /anaconda/envs/rl4sem/include -I/anaconda/envs/rl4sem/include -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /anaconda/envs/rl4sem/include -I/anaconda/envs/rl4sem/include -DPy_BUILD_CORE_BUILTIN"
    PY_CFLAGS = "-DNDEBUG -fwrapv -O2 -Wall   -fPIC   -O2 -isystem /anaconda/envs/rl4sem/include -fPIC -O2   -isystem /anaconda/envs/rl4sem/include "
    PY_CFLAGS_NODIST = "-fno-semantic-interposition   -g -std=c11 -Werror=implicit-function-declaration -fvisibility=hidden   -I/croot/python-split_1694437901252/work/Include/internal"
    PY_COERCE_C_LOCALE = "1"
    PY_CORE_CFLAGS = "-DNDEBUG -fwrapv -O2 -Wall   -fPIC   -O2   -isystem /anaconda/envs/rl4sem/include -fPIC -O2  -isystem /anaconda/envs/rl4sem/include -fno-semantic-interposition  -g -std=c11 -Werror=implicit-function-declaration -fvisibility=hidden   -I/croot/python-split_1694437901252/work/Include/internal -IObjects -IInclude -IPython -I. -I/croot/python-split_1694437901252/work/Include -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /anaconda/envs/rl4sem/include -I/anaconda/envs/rl4sem/include -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /anaconda/envs/rl4sem/include -I/anaconda/envs/rl4sem/include -DPy_BUILD_CORE"
    PY_CORE_LDFLAGS = "-Wl,-rpath,/anaconda/envs/rl4sem/lib -Wl,-rpath-link,/anaconda/envs/rl4sem/lib -L/anaconda/envs/rl4sem/lib -Wl,-rpath,/anaconda/envs/rl4sem/lib -Wl,-rpath-link,/anaconda/envs/rl4sem/lib -L/anaconda/envs/rl4sem/lib -fno-semantic-interposition   -g"
    PY_CPPFLAGS = "-IObjects -IInclude -IPython -I. -I/croot/python-split_1694437901252/work/Include -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /anaconda/envs/rl4sem/include -I/anaconda/envs/rl4sem/include -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /anaconda/envs/rl4sem/include -I/anaconda/envs/rl4sem/include"
    PY_ENABLE_SHARED = "0"
    PY_FORMAT_SIZE_T = ""z""
    PY_LDFLAGS = "-Wl,-rpath,/anaconda/envs/rl4sem/lib -Wl,-rpath-link,/anaconda/envs/rl4sem/lib -L/anaconda/envs/rl4sem/lib -Wl,-rpath,/anaconda/envs/rl4sem/lib -Wl,-rpath-link,/anaconda/envs/rl4sem/lib -L/anaconda/envs/rl4sem/lib"
    PY_LDFLAGS_NODIST = "-fno-semantic-interposition   -g"
    PY_LDFLAGS_NOLTO = "-Wl,-rpath,/anaconda/envs/rl4sem/lib -Wl,-rpath-link,/anaconda/envs/rl4sem/lib -L/anaconda/envs/rl4sem/lib -Wl,-rpath,/anaconda/envs/rl4sem/lib -Wl,-rpath-link,/anaconda/envs/rl4sem/lib -L/anaconda/envs/rl4sem/lib -fno-lto"
    PY_SQLITE_ENABLE_LOAD_EXTENSION = "1"
    PY_SQLITE_HAVE_SERIALIZE = "1"
    PY_SSL_DEFAULT_CIPHERS = "1"
    PY_SSL_DEFAULT_CIPHER_STRING = "0"
    PY_STDMODULE_CFLAGS = "-DNDEBUG -fwrapv -O2 -Wall  -fPIC -O2 -isystem /anaconda/envs/rl4sem/include -fPIC -O2 -isystem /anaconda/envs/rl4sem/include -fno-semantic-interposition   -g -std=c11 -Werror=implicit-function-declaration -fvisibility=hidden  -I/croot/python-split_1694437901252/work/Include/internal -IObjects -IInclude -IPython -I. -I/croot/python-split_1694437901252/work/Include -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /anaconda/envs/rl4sem/include -I/anaconda/envs/rl4sem/include -DNDEBUG -D_FORTIFY_SOURCE=2 -O2 -isystem /anaconda/envs/rl4sem/include -I/anaconda/envs/rl4sem/include"
    PY_SUPPORT_TIER = "1"
    Py_DEBUG = "0"
    Py_ENABLE_SHARED = "0"
    Py_HASH_ALGORITHM = "0"
    Py_STATS = "0"
    Py_TRACE_REFS = "0"
    QUICKTESTOPTS = "-x test_subprocess test_io test_lib2to3 \"
    READELF = "readelf"
    RESSRCDIR = "Mac/Resources/framework"
    RETSIGTYPE = "void"
    RUNSHARED = ""
    SCRIPTDIR = "/anaconda/envs/rl4sem/lib"
    SETPGRP_HAVE_ARG = "0"
    SHELL = "/bin/sh"
    SHLIBS = "-lpthread -ldl  -lutil"
    SHLIB_SUFFIX = ".so"
    SIGNED_RIGHT_SHIFT_ZERO_FILLS = "0"
    SITEPATH = ""
    SIZEOF_DOUBLE = "8"
    SIZEOF_FLOAT = "4"
    SIZEOF_FPOS_T = "16"
    SIZEOF_INT = "4"
    SIZEOF_LONG = "8"
    SIZEOF_LONG_DOUBLE = "16"
    SIZEOF_LONG_LONG = "8"
    SIZEOF_OFF_T = "8"
    SIZEOF_PID_T = "4"
    SIZEOF_PTHREAD_KEY_T = "4"
    SIZEOF_PTHREAD_T = "8"
    SIZEOF_SHORT = "2"
    SIZEOF_SIZE_T = "8"
    SIZEOF_TIME_T = "8"
    SIZEOF_UINTPTR_T = "8"
    SIZEOF_VOID_P = "8"
    SIZEOF_WCHAR_T = "4"
    SIZEOF__BOOL = "1"
    SOABI = "cpython-311-x86_64-linux-gnu"
    SRCDIRS = "Modules   Modules/_blake2   Modules/_ctypes   Modules/_decimal   Modules/_decimal/libmpdec   Modules/_io   Modules/_multiprocessing   Modules/_sha3   Modules/_sqlite   Modules/_sre   Modules/_xxtestfuzz   Modules/cjkcodecs   Modules/expat   Objects   Parser   Programs   Python   Python/frozen_modules   Python/deepfreeze"
    SRC_GDB_HOOKS = "/croot/python-split_1694437901252/work/Tools/gdb/libpython.py"
    STATIC_LIBPYTHON = "1"
    STDC_HEADERS = "1"
    STRICT_SYSV_CURSES = "/* Don't use ncurses extensions */"
    STRIPFLAG = "-s"
    SUBDIRS = ""
    SUBDIRSTOO = "Include Lib Misc"
    SYSLIBS = "-lm"
    SYS_SELECT_WITH_SYS_TIME = "1"
    TESTOPTS = ""
    TESTPATH = ""
    TESTPYTHON = "./python -E"
    TESTPYTHONOPTS = ""
    TESTRUNNER = "./python -E /croot/python-split_1694437901252/work/Tools/scripts/run_tests.py"
    TESTSUBDIRS = "ctypes/test \"
    TESTTIMEOUT = "1200"
    TEST_MODULES = "yes"
    THREAD_STACK_SIZE = "0"
    TIMEMODULE_LIB = "0"
    TIME_WITH_SYS_TIME = "1"
    TM_IN_SYS_TIME = "0"
    TZPATH = "/anaconda/envs/rl4sem/share/zoneinfo:/anaconda/envs/rl4sem/share/tzinfo"
    UNICODE_DEPS = "\"
    UNIVERSALSDK = ""
    UPDATE_FILE = "/croot/python-split_1694437901252/work/Tools/scripts/update_file.py"
    USE_COMPUTED_GOTOS = "1"
    VERSION = "3.11"
    VPATH = "/croot/python-split_1694437901252/work"
    WASM_ASSETS_DIR = "./anaconda/envs/rl4sem"
    WASM_STDLIB = "./anaconda/envs/rl4sem/lib/python3.11/os.py"
    WHEEL_PKG_DIR = ""
    WINDOW_HAS_FLAGS = "1"
    WITH_DECIMAL_CONTEXTVAR = "1"
    WITH_DOC_STRINGS = "1"
    WITH_DTRACE = "0"
    WITH_DYLD = "0"
    WITH_EDITLINE = "0"
    WITH_FREELISTS = "1"
    WITH_LIBINTL = "0"
    WITH_NEXT_FRAMEWORK = "0"
    WITH_PYMALLOC = "1"
    WITH_VALGRIND = "0"
    X87_DOUBLE_ROUNDING = "0"
    XMLLIBSUBDIRS = "xml xml/dom xml/etree xml/parsers xml/sax"
    abiflags = ""
    abs_builddir = "/croot/python-split_1694437901252/work/build-static"
    abs_srcdir = "/croot/python-split_1694437901252/work"
    base = "/anaconda/envs/rl4sem"
    datarootdir = "/anaconda/envs/rl4sem/share"
    exec_prefix = "/anaconda/envs/rl4sem"
    installed_base = "/anaconda/envs/rl4sem"
    installed_platbase = "/anaconda/envs/rl4sem"
    platbase = "/anaconda/envs/rl4sem"
    platlibdir = "lib"
    prefix = "/anaconda/envs/rl4sem"
    projectbase = "/anaconda/envs/rl4sem/bin"
    py_version = "3.11.5"
    py_version_nodot = "311"
    py_version_nodot_plat = ""
    py_version_short = "3.11"
    srcdir = "/anaconda/envs/rl4sem/lib/python3.11/config-3.11-x86_64-linux-gnu"
    userbase = "/home/azureuser/.local"

Example pyproject.toml

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

[tool.poetry]
name = "sem_env"
description = "Reinforcement Learning for SEM"
authors = ["appliedAI"]
version = "0.1.0"
exclude = ["test/*", "docs/*"]
packages = [{ include = "*", from = "src" }]

[tool.poetry.dependencies]
# main dependencies
python = ">=3.11,<3.12"
accsr = "^0.4.6"
celluloid = "0.2.0"
cloudpickle = "^3.0.0"
dataclasses_json = "0.5.7"
datapane = "*"
grpcio = "^1.39.0"
gymnasium = "0.28.1"
imageio = "^2.9.0"
isort = "^5.12.0"
joblib = "^1.0"
kaleido = "0.2.1"
libsvm = "3.23.0.4"
matplotlib = "^3.4.2"
mpld3 = "^0.5.10"
numpy = "*"
opencv-python = "4.8.0.76"
opencv-python-headless = "4.8.0.76"
overrides = "^7.4.0"
pandas = "*"
piq = "^0.8.0"
plotly = "^5.3.1"
prometheus-client = "0.13.1"
py-cpuinfo = "8.0.0"
pydantic = "^2.5.1"
scikit-image = "^0.22.0"
scikit-learn = "1.3.2"
seaborn = "0.13.0"
streamlit = "^1.28.2"
tifffile = "^2023.9.26"
tqdm = ">=4.66.1"
wrapt = "^1.13.3"

[[tool.poetry.source]]
name = "pytorch-cuda"
url = "https://download.pytorch.org/whl/cu118"
priority = "supplemental"

[tool.poetry.group.octave]
optional = true
[tool.poetry.group.octave.dependencies]
oct2py = "5.2.0"

[tool.poetry.group.simulation]
# Not actually optional, but we want to install layer by layer in the docker image
optional = true
[tool.poetry.group.simulation.dependencies]
celluloid = "0.2.0"
cryptography = "^3.4.8"
imageio = "*"
lmdb = "^1.4.1"
matplotlib = "^3.4.2"
numpy = "^1.24.4, <1.25"
opencv-python = "4.8.0.76"
opencv-python-headless = "4.8.0.76"
pandas = "*"
py-cpuinfo = "8.0.0"
pydantic = "^2.5.1"
tifffile = "^2023.9.26"
wrapt = "^1.16.0"

[tool.poetry.group.train]
# Not actually optional, but we want to install layer by layer in the docker image
optional = true
[tool.poetry.group.train.dependencies]
click = "^8.0.3"
cryptography = "^3.4.8"
gitpython = "*"
ipywidgets = "^7.6.5"
jsonargparse = "4.19.0"
numpy = "<1.25"
shortuuid = "^1.0.8"
tensorboard = "^2.6.0"
tensorboardX = "^2.1"
termcolor = "^1.1.0"

[tool.poetry.group.iqm]
# Not actually optional, but we want to install layer by layer in the docker image
optional = true
[tool.poetry.group.iqm.dependencies]
scikit-learn-intelex = "2023.2.1"
scipy = "^1.11.2"
xgboost = "*"

[tool.poetry.group.dev]
optional = true
[tool.poetry.group.dev.dependencies]
black = { version = "^23.7.0", extras = ["jupyter"] }
ipython = "*"
ipywidgets = "^7.6.5"
jupyter = "1.0.0"
mypy = "^1.4.1"
nbconvert = "^6.5.0"
nbsphinx = "*"
nbstripout = "^0.6.1"
notebook = "<7"
poethepoet = "^0.20.0"
pre-commit = "^3.3.3"
pytest = "^7.4.3"
pytest-cov = "*"
pytest-lazy-fixture = "*"
pytest-xdist = "^3.5.0"
ruff = "^0.0.285"
sphinx = "<7"
sphinx_rtd_theme = "*"
sphinxcontrib-bibtex = "*"
sphinxcontrib-spelling = "^8.0.0"

[tool.poetry.group.ui]
optional = true
[tool.poetry.group.ui.dependencies]
dataclasses-json = "^0.5.7"
streamlit = "^1.12.0"

[tool.poetry.group.ray]
optional = true
[tool.poetry.group.ray.dependencies]
ray = { version="2.7.1", extras=["tune", "rllib"] }

[tool.poetry.group.rltrain]
optional = true
[tool.poetry.group.rltrain.dependencies]
stable-baselines3 = {version = "2.2.1", extras = ["extra"]}
tianshou = { git = "https://github.com/thu-ml/tianshou.git", rev = "9b6cb6903eddb529437f949b76ffa87a9b9115e9" }
torch = [
    {markers="sys.platform != 'darwin' and sys.platform != 'win32'", version="2.1.1", source="pytorch-cuda"},
    {markers="sys.platform == 'darwin' or sys.platform == 'win32'", version="2.1.1", source="pypi"}
]

[tool.poetry.group.mujoco]
optional = true
[tool.poetry.group.mujoco.dependencies]
Cython = { version = "<3"}
mujoco_py = { version = "*"}

[tool.isort]
profile = "black"

[tool.mypy]
allow_redefinition = true
check_untyped_defs = true
disallow_incomplete_defs = true
disallow_untyped_defs = true
ignore_missing_imports = true
no_implicit_optional = true
pretty = true
show_error_codes = true
show_error_context = true
show_traceback = true
strict_equality = true
strict_optional = true
warn_no_return = true
warn_redundant_casts = true
warn_unreachable = true
warn_unused_configs = true
warn_unused_ignores = true
exclude = "^docs/|^notebooks/|^deprecated/|"

[tool.doc8]
max-line-length = 1000

[tool.black]
line-length = 100
target-version = ["py311"]

[tool.ruff]
select = [
    "ASYNC", "B", "C4", "C90", "COM", "D", "DTZ", "E", "F", "FLY", "G", "I", "ISC", "PIE", "PLC", "PLE", "PLW", "RET", "RUF", "RSE", "SIM", "TID", "UP", "W", "YTT",
]
ignore = [
    "E501", # line too long. black does a good enough job
    "E741", # variable names like "l". this isn't a huge problem
    "B008", # do not perform function calls in argument defaults. we do this sometimes
    "B011", # assert false. we don't use python -O
    "B028", # we don't need explicit stacklevel for warnings
    "D100", "D101", "D102", "D104", "D105", "D107", "D203", "D213", "D401", "D402", "D103", # docstring stuff
    "DTZ005", # we don't need that
    # remaining rules from https://github.com/psf/black/blob/main/.flake8 (except W503)
    # this is a simplified version of config, making vscode plugin happy
    "E402", "E501", "E701", "E731", "C408", "E203",
    "G004", # f-strings in logging are fine,
    "D205", # 1 blank line required between summary line and description
]
unfixable = [
    "F841", # unused variable. ruff keeps the call, but mostly we want to get rid of it all
    "F601", # automatic fix might obscure issue
    "F602", # automatic fix might obscure issue
    "B018", # automatic fix might obscure issue
]
extend-fixable = [
    "F401", # unused import
    "B905", # bugbear
]

target-version = "py311"

[tool.ruff.mccabe]
max-complexity = 20

[tool.poe]
# needed because we have some old protobuf files hanging around
env = {PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION = "python"}

# keep relevant parts in sync with pre-commit
[tool.poe.tasks]  # https://github.com/nat-n/poethepoet
test = "pytest tests --cov=src --cov-report=xml --cov-report=term-missing --durations=0 -v --color=yes"
test-notebooks = "pytest notebooks -n 9"
_black_check = "black --check --exclude src/sensai ."
_lock_check = "poetry check --lock"
_isort_check = "isort --check --skip src/sensai ."
_ruff_check = "ruff check --exclude src/sensai ."
_black_format = "black --exclude src/sensai ."
nbstripout = "nbstripout notebooks/*"
# TODO: use this once we're ready
_ruff_format = "ruff --fix --exclude src/sensai ."
_isort_format = "isort --skip src/sensai ."
lint = ["_black_check", "_isort_check", "_lock_check"]
# TODO: add to format once sort plugin no longer requires pydantic<2
_poetry_install_sort_plugin = "poetry self add poetry-plugin-sort"
_poetry_sort = "poetry sort"
format = ["_black_format", "_isort_format"]
_spellcheck = "sphinx-build -W -b spelling docs docs/_build"
_generate_rst_files = "python build_scripts/update_docs.py"
_doc_build = "bash build_scripts/build-docs.sh"
doc-clean = "rm -rf docs/_build"
# TODO or not todo: spellcheck currently finds over 1500 misspelled words, things like config, env, sem etc.
#   If we want to use it, we should add such words to the dictionary
doc-build = ["_generate_rst_files", "_doc_build"]
type-check = "mypy src"

Poetry Runtime Logs

From Poetry's point of view, there is no failing command. As stated above, the command reports success (stating that it installed the right version) while having installed the wrong wheel. The issue has already been fixed by deleting the cache on the most recently affected machine, so the corresponding log currently cannot be obtained.
dimbleby commented 8 months ago

please remove all the unnecessary parts from the pyproject.toml, and provide a series of commands to reproduce a problem.

opcode81 commented 8 months ago

@dimbleby, the relevant part of the pyproject.toml is mentioned in the issue description: a dependency which uses a git commit hash and where the hash is later changed. (I only pasted the full file, because your workflow asked for it.)

I think it would make the most sense to analyse this issue by looking at the source code which resolves git-based dependencies - as there is clearly a resolution problem which, under certain conditions, makes Poetry use the wheel associated with another hash (which is in the cache alongside the newly built wheel).

If you really wanted to reproduce it, it would involve steps where the pyproject.toml is changed to a new hash, but it may or may not be deterministic. See issue description.

dimbleby commented 8 months ago

One might get lucky reading source code - you are very welcome to try it - but I don't like my chances

A minimal reproducible example is much the most helpful thing that an issue report can provide: yes, please.

opcode81 commented 8 months ago

I couldn't reproduce it just now with a minimal example. But I am also not surprised, because out of our team of 7 developers, only 2 people experienced the issue. Others experienced it the last time we changed the commit hash.

bavalpey commented 8 months ago

One might get lucky reading source code - you are very welcome to try it - but I don't like my chances

A minimal reproducible example is much the most helpful thing that an issue report can provide: yes, please.

It's a bit odd to ask for a MRE when the issue is nondeterministic.

opcode81 commented 7 months ago

@dimbleby I am providing instructions and resources for reproduction in this repository: https://github.com/opcode81/poetry_issue_9075

dimbleby commented 7 months ago

not non-deterministic after all then?

I haven't run your repro but if the suspicion is that a cache for revision abc is being wrongly reused for revision def - you'll want to look at this code.

The directory name for the cached archive for git dependencies should have incorporated the exact revision so that's supposed to work out just fine - add some trace and dig into where that's going wrong,

opcode81 commented 7 months ago

I asked the last person who ran into the issue to archive their cache, and that's the basis for the reproduction. Unfortunately, it's still unclear which conditions led to the cache being constructed the way it is in the repo I provided. It happened on 3 of our machines but not all of them.

Unfortunately, I do not have time to look into fixing the issue myself; we have since decided to switch from Poetry to conda/mamba. There were just way too many problems that were wasting time we could have better spent making some actual progress in our project.

dimbleby commented 7 months ago

Unfortunately, it's still unclear which conditions led to the cache being constructed the way it is

fair enough, but without a way to reproduce this I expect there is no way to do anything useful with it.

If you have given up on this, might as well close it: assuming it is real then someone will eventually show up with a way to reproduce it.

opcode81 commented 7 months ago

With the repo I provided, you can at least partially reproduce the issue: You can analyse the dependency resolution and determine what is causing Poetry to pick an old, cached version instead of the correct one. Did you do this? And is it already clear that without the process that led to the cache being created in this way, there is no chance of knowing what the actual problem is? I didn't get the impression that this analysis has already happened, and yet you want to close this. Are you not interested in getting to the bottom of this?

I went to great lengths in order to provide the Poetry developers with detailed information on this issue as well as a repository for reproduction - and the response I get is that if I'm not going to look into it myself, you're just going to close this? I really don't understand why the default is, apparently, to do nothing at all if there is not a way to reproduce the issue from scratch.

What I provided should be a sufficient basis to fix the problem. Two scenarios:

  1. If Poetry is picking a cached version without being able to unambiguously determine whether it is the correct one, the fix is simply to make it know whether it is the correct one by adding more meta-data to the cache. It appears that Poetry does not know which git commit hash a cached wheel corresponds to, which is clearly a problem, don't you think? With the added meta-data, you can know that the cached version isn't the right one and install the correct one instead. To establish backward compatibility with old caches, you can simply not use any cached entries for git dependencies that don't have the meta-data, as this is the safe thing to do.
  2. If Poetry already has the necessary meta-data somewhere (didn't check), it should use it.
opcode81 commented 7 months ago

The fact that adding --no-cache to the Poetry command does not fix the issue, as originally reported, is also a bug that should be looked into.

dimbleby commented 7 months ago
>>> from poetry.utils.cache import ArtifactCache
>>> from pathlib import Path
>>> c = ArtifactCache(cache_dir=Path(""))
>>> c.get_cache_directory_for_git("https://github.com/thu-ml/tianshou.git", "9b6cb6903eddb529437f949b76ffa87a9b9115e9", subdirectory=None)
PosixPath('76/5c/9c/8778c975cd921e5de6d822642d4fbfcccf57595fde67eec516dfcba17d')

So I expect that the wheel in that place in your cache is the one that poetry uses

does the wheel in that place in your repro correpond to that revision or not?

I expect "no", in which case the question is: so how did it get there? (what does it correspond to?) and then we have to go back to you to provide a way to reproduce this

I am fairly sure that you are the person in the world who has the most interest in getting to the bottom of this. If you are now not using poetry therefore don't care... well I suppose it makes little difference whether we all ignore an open issue or all ignore a closed issue, my tidy-minded preference is to close such things.

opcode81 commented 7 months ago

does the wheel in that place in your repro correpond to that revision or not?

It does not.

how did it get there?

It's hard to say. Since the directory is determined by hashing the URL and revision with SHA-256, we can basically rule out a hash collision. But perhaps there is an issue with the cloning mechanism where it's possible for an old cached checkout (in the cache's src/ folder) to be used instead of a fresh checkout. I had a brief look at the respective source code, and while poetry does try to reuse an existing checkout, I found no obvious issues.

what does it correspond to?

I can't pinpoint it exactly, but it appears to be a version from around November 26, 2023, whereas the requested revision is from February 15, 2024.

it makes little difference whether we all ignore an open issue or all ignore a closed issue

I strongly disagree. Closed issues are less easily discovered, especially on GitHub, where the default search filter contains "is:open". If someone runs into the same issue, they may not find this issue; it is unexpected for an unresolved issue to be closed. Likewise, the poetry developer who decides to look into the then newly created issue may not find this issue either and will miss out on the insights that have already been gathered. I would close an issue only if it was either resolved or deemed a non-issue. Unless you think I am making this up, neither should be the case here.

And you still haven't commented on the ineffectiveness of --no-cache.

lorenzwalthert commented 1 month ago

I had the same problem. Clearing the cache did not do the trick for me. However, probably that was because I configured poetry to create a .venv folder inside the project directory... Once I did that too, things worked (around). Posting this for people who might have the same configuration.