python-poetry / poetry

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

Poetry Virtual environment breaks shared namespaces #9684

Open FlowMatric opened 1 month ago

FlowMatric commented 1 month ago

Description

I found that poetry install creates a virtual environment (or handles dependencies) not the same way as an environment managed by pip. IMO, poetry should be able to handle shared high level namespaces, the same way as pip does:

When a poetry-managed project uses a namespace that is also used by a dependency, the project code in sub-packages is no longer available in the project .venv.

In contrast, when one creates a virtual environment with venv, differently named sub-packages are "on the path"

Here's the example project I created for this issue: https://github.com/FlowMatric/namespace_test

Workarounds

None

Poetry Installation Method

pipx

Operating System

Ubuntu 22.04

Poetry Version

1.8.3

Poetry Configuration

$ poetry config --list
cache-dir = "/home/fkluiben/.cache/pypoetry"
experimental.system-git-client = false
installer.max-workers = null
installer.modern-installation = true
installer.no-binary = null
installer.parallel = true
keyring.enabled = true
solver.lazy-wheel = true
virtualenvs.create = true
virtualenvs.in-project = true
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/fkluiben/.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.10"
Current installation scheme: "posix_local"

Paths: 
    data = "/usr/local"
    include = "/usr/include/python3.10"
    platinclude = "/usr/include/python3.10"
    platlib = "/usr/local/lib/python3.10/dist-packages"
    platstdlib = "/usr/lib/python3.10"
    purelib = "/usr/local/lib/python3.10/dist-packages"
    scripts = "/usr/local/bin"
    stdlib = "/usr/lib/python3.10"

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 = "x86_64-linux-gnu-gcc-ar"
    ARFLAGS = "rcs"
    BASECFLAGS = "-Wno-unused-result -Wsign-compare"
    BASECPPFLAGS = "-IObjects -IInclude -IPython"
    BASEMODLIBS = ""
    BINDIR = "/usr/bin"
    BINLIBDEST = "/usr/lib/x86_64-linux-gnu/python3.10"
    BLDLIBRARY = "-lpython3.10"
    BLDSHARED = "x86_64-linux-gnu-gcc -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions      -g -fwrapv -O2   "
    BUILDEXE = ""
    BUILDPYTHON = "python"
    BUILD_GNU_TYPE = "x86_64-pc-linux-gnu"
    BYTESTR_DEPS = "\"
    CC = "x86_64-linux-gnu-gcc"
    CCSHARED = "-fPIC"
    CFLAGS = "-Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g       -fstack-protector-strong -Wformat -Werror=format-security  -g -fwrapv -O2   "
    CFLAGSFORSHARED = "-fPIC"
    CFLAGS_ALIASING = ""
    CFLAGS_NODIST = ""
    CONFIGFILES = "configure configure.ac acconfig.h pyconfig.h.in Makefile.pre.in"
    CONFIGURE_CFLAGS = "-g       -fstack-protector-strong -Wformat -Werror=format-security"
    CONFIGURE_CFLAGS_NODIST = "-std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden"
    CONFIGURE_CPPFLAGS = "-Wdate-time -D_FORTIFY_SOURCE=2"
    CONFIGURE_LDFLAGS = "-Wl,-Bsymbolic-functions      -g -fwrapv -O2   "
    CONFIGURE_LDFLAGS_NODIST = ""
    CONFIG_ARGS = "'--enable-shared' '--prefix=/usr' '--libdir=/usr/lib/x86_64-linux-gnu' '--enable-ipv6' '--enable-loadable-sqlite-extensions' '--with-dbmliborder=bdb:gdbm' '--with-computed-gotos' '--without-ensurepip' '--with-system-expat' '--with-dtrace' '--with-system-libmpdec' '--with-wheel-pkg-dir=/usr/share/python-wheels/' 'MKDIR_P=/bin/mkdir -p' '--with-system-ffi' 'CC=x86_64-linux-gnu-gcc' 'CFLAGS=-g       -fstack-protector-strong -Wformat -Werror=format-security ' 'LDFLAGS=-Wl,-Bsymbolic-functions      -g -fwrapv -O2   ' 'CPPFLAGS=-Wdate-time -D_FORTIFY_SOURCE=2'"
    CONFINCLUDEDIR = "/usr/include"
    CONFINCLUDEPY = "/usr/include/python3.10"
    COREPYTHONPATH = ""
    COVERAGE_INFO = "/build/python3.10-AW9wLY/python3.10-3.10.12/build-shared/coverage.info"
    COVERAGE_REPORT = "/build/python3.10-AW9wLY/python3.10-3.10.12/build-shared/lcov-report"
    COVERAGE_REPORT_OPTIONS = "--no-branch-coverage --title "CPython lcov report""
    CPPFLAGS = "-IObjects -IInclude -IPython -I. -I../Include -Wdate-time -D_FORTIFY_SOURCE=2"
    CXX = "x86_64-linux-gnu-g++"
    DESTDIRS = "/usr /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/python3.10 /usr/lib/python3.10/lib-dynload"
    DESTLIB = "/usr/lib/python3.10"
    DESTPATH = ""
    DESTSHARED = "/usr/lib/python3.10/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 = "/usr/bin/dtrace"
    DTRACE_DEPS = "\"
    DTRACE_HEADERS = "Include/pydtrace_probes.h"
    DTRACE_OBJS = "Python/pydtrace.o"
    DYNLOADFILE = "dynload_shlib.o"
    ENABLE_IPV6 = "1"
    ENSUREPIP = "no"
    EXE = ""
    EXEMODE = "755"
    EXPERIMENTAL_ISOLATED_SUBINTERPRETERS = "0"
    EXPORTSFROM = ""
    EXPORTSYMS = ""
    EXTRATESTOPTS = ""
    EXT_SUFFIX = ".cpython-310-x86_64-linux-gnu.so"
    FILEMODE = "644"
    FLOAT_WORDS_BIGENDIAN = "0"
    FLOCK_NEEDS_LIBBSD = "0"
    GETPGRP_HAVE_ARG = "0"
    GITBRANCH = ""
    GITTAG = ""
    GITVERSION = ""
    GNULD = "yes"
    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_TEXTDOMAIN_CODESET = "1"
    HAVE_BLUETOOTH_BLUETOOTH_H = "1"
    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_CHFLAGS = "0"
    HAVE_CHOWN = "1"
    HAVE_CHROOT = "1"
    HAVE_CLOCK = "1"
    HAVE_CLOCK_GETRES = "1"
    HAVE_CLOCK_GETTIME = "1"
    HAVE_CLOCK_SETTIME = "1"
    HAVE_CLOSE_RANGE = "1"
    HAVE_COMPUTED_GOTOS = "1"
    HAVE_CONFSTR = "1"
    HAVE_CONIO_H = "0"
    HAVE_COPYSIGN = "1"
    HAVE_COPY_FILE_RANGE = "1"
    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_DECL_ISFINITE = "1"
    HAVE_DECL_ISINF = "1"
    HAVE_DECL_ISNAN = "1"
    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_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 = "1"
    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_FINITE = "1"
    HAVE_FLOCK = "1"
    HAVE_FORK = "1"
    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_GAMMA = "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_GETADDRINFO = "1"
    HAVE_GETC_UNLOCKED = "1"
    HAVE_GETENTROPY = "1"
    HAVE_GETGRGID_R = "1"
    HAVE_GETGRNAM_R = "1"
    HAVE_GETGROUPLIST = "1"
    HAVE_GETGROUPS = "1"
    HAVE_GETHOSTBYNAME = "0"
    HAVE_GETHOSTBYNAME_R = "1"
    HAVE_GETHOSTBYNAME_R_3_ARG = "0"
    HAVE_GETHOSTBYNAME_R_5_ARG = "0"
    HAVE_GETHOSTBYNAME_R_6_ARG = "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_GETPRIORITY = "1"
    HAVE_GETPWENT = "1"
    HAVE_GETPWNAM_R = "1"
    HAVE_GETPWUID_R = "1"
    HAVE_GETRANDOM = "1"
    HAVE_GETRANDOM_SYSCALL = "1"
    HAVE_GETRESGID = "1"
    HAVE_GETRESUID = "1"
    HAVE_GETSID = "1"
    HAVE_GETSPENT = "1"
    HAVE_GETSPNAM = "1"
    HAVE_GETWD = "1"
    HAVE_GLIBC_MEMMOVE_BUG = "0"
    HAVE_GRP_H = "1"
    HAVE_HSTRERROR = "1"
    HAVE_HTOLE64 = "1"
    HAVE_HYPOT = "1"
    HAVE_IEEEFP_H = "0"
    HAVE_IF_NAMEINDEX = "1"
    HAVE_INET_ATON = "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_LGAMMA = "1"
    HAVE_LIBDL = "1"
    HAVE_LIBDLD = "0"
    HAVE_LIBIEEE = "0"
    HAVE_LIBINTL_H = "1"
    HAVE_LIBREADLINE = "1"
    HAVE_LIBRESOLV = "0"
    HAVE_LIBSENDFILE = "0"
    HAVE_LIBUTIL_H = "0"
    HAVE_LIBUUID = "1"
    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 = "1"
    HAVE_LINUX_CAN_RAW_FD_FRAMES = "1"
    HAVE_LINUX_CAN_RAW_H = "1"
    HAVE_LINUX_CAN_RAW_JOIN_FILTERS = "1"
    HAVE_LINUX_MEMFD_H = "1"
    HAVE_LINUX_NETLINK_H = "1"
    HAVE_LINUX_QRTR_H = "1"
    HAVE_LINUX_RANDOM_H = "1"
    HAVE_LINUX_TIPC_H = "1"
    HAVE_LINUX_VM_SOCKETS_H = "1"
    HAVE_LINUX_WAIT_H = "1"
    HAVE_LOCKF = "1"
    HAVE_LOG1P = "1"
    HAVE_LOG2 = "1"
    HAVE_LONG_DOUBLE = "1"
    HAVE_LSTAT = "1"
    HAVE_LUTIMES = "1"
    HAVE_MADVISE = "1"
    HAVE_MAKEDEV = "1"
    HAVE_MBRTOWC = "1"
    HAVE_MEMFD_CREATE = "1"
    HAVE_MEMORY_H = "0"
    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_NCURSES_H = "1"
    HAVE_NDIR_H = "0"
    HAVE_NETPACKET_PACKET_H = "1"
    HAVE_NET_IF_H = "1"
    HAVE_NICE = "1"
    HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION = "0"
    HAVE_OPENAT = "1"
    HAVE_OPENPTY = "1"
    HAVE_PATHCONF = "1"
    HAVE_PAUSE = "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 = "1"
    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_PTY_H = "1"
    HAVE_PWRITE = "1"
    HAVE_PWRITEV = "1"
    HAVE_PWRITEV2 = "1"
    HAVE_READLINK = "1"
    HAVE_READLINKAT = "1"
    HAVE_READV = "1"
    HAVE_REALPATH = "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_ROUND = "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 = "1"
    HAVE_SEM_GETVALUE = "1"
    HAVE_SEM_OPEN = "1"
    HAVE_SEM_TIMEDWAIT = "1"
    HAVE_SEM_UNLINK = "1"
    HAVE_SENDFILE = "1"
    HAVE_SETEGID = "1"
    HAVE_SETEUID = "1"
    HAVE_SETGID = "1"
    HAVE_SETGROUPS = "1"
    HAVE_SETHOSTNAME = "1"
    HAVE_SETITIMER = "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_SETUID = "1"
    HAVE_SETVBUF = "1"
    HAVE_SHADOW_H = "1"
    HAVE_SHM_OPEN = "1"
    HAVE_SHM_UNLINK = "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_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_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 = "1"
    HAVE_SYS_RESOURCE_H = "1"
    HAVE_SYS_SELECT_H = "1"
    HAVE_SYS_SENDFILE_H = "1"
    HAVE_SYS_SOCKET_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_TGAMMA = "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_TZNAME = "0"
    HAVE_UCS4_TCL = "0"
    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_UUID_CREATE = "0"
    HAVE_UUID_ENC_BE = "0"
    HAVE_UUID_GENERATE_TIME_SAFE = "1"
    HAVE_UUID_H = "0"
    HAVE_UUID_UUID_H = "1"
    HAVE_VFORK = "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__GETPTY = "0"
    HOST_GNU_TYPE = "x86_64-pc-linux-gnu"
    INCLDIRSTOMAKE = "/usr/include /usr/include /usr/include/python3.10 /usr/include/python3.10"
    INCLUDEDIR = "/usr/include"
    INCLUDEPY = "/usr/include/python3.10"
    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.10.so.1.0"
    IO_H = "Modules/_io/_iomodule.h"
    IO_OBJS = "\"
    LDCXXSHARED = "x86_64-linux-gnu-g++ -shared -Wl,-O1 -Wl,-Bsymbolic-functions"
    LDFLAGS = "-Wl,-Bsymbolic-functions      -g -fwrapv -O2   "
    LDFLAGS_NODIST = ""
    LDLIBRARY = "libpython3.10.so"
    LDLIBRARYDIR = ""
    LDSHARED = "x86_64-linux-gnu-gcc -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions      -g -fwrapv -O2   "
    LDVERSION = "3.10"
    LIBC = ""
    LIBDEST = "/usr/lib/python3.10"
    LIBDIR = "/usr/lib/x86_64-linux-gnu"
    LIBFFI_INCLUDEDIR = ""
    LIBM = "-lm"
    LIBOBJDIR = "Python/"
    LIBOBJS = ""
    LIBPC = "/usr/lib/x86_64-linux-gnu/pkgconfig"
    LIBPL = "/usr/lib/python3.10/config-3.10-x86_64-linux-gnu"
    LIBPYTHON = ""
    LIBRARY = "libpython3.10.a"
    LIBRARY_DEPS = "libpython3.10.a libpython3.10.so libpython3.so"
    LIBRARY_OBJS = "\"
    LIBRARY_OBJS_OMIT_FROZEN = "\"
    LIBS = "-lcrypt -ldl  -lm"
    LIBSUBDIRS = "asyncio \"
    LINKCC = "x86_64-linux-gnu-gcc"
    LINKFORSHARED = "-Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions"
    LIPO_32BIT_FLAGS = ""
    LIPO_INTEL64_FLAGS = ""
    LLVM_PROF_ERR = "no"
    LLVM_PROF_FILE = ""
    LLVM_PROF_MERGER = "true"
    LN = "ln"
    LOCALMODLIBS = "-lexpat                       -L/usr/lib -lz                       -lexpat"
    MACHDEP = "linux"
    MACHDEP_OBJS = ""
    MACHDESTLIB = "/usr/lib/x86_64-linux-gnu/python3.10"
    MACOSX_DEPLOYMENT_TARGET = ""
    MAINCC = "x86_64-linux-gnu-gcc"
    MAJOR_IN_MKDEV = "0"
    MAJOR_IN_SYSMACROS = "1"
    MAKESETUP = "../Modules/makesetup"
    MANDIR = "/usr/share/man"
    MKDIR_P = "/bin/mkdir -p"
    MODBUILT_NAMES = "array  cmath  math  _struct  _random  _elementtree  _pickle  _datetime  _bisect  _heapq  _statistics  unicodedata  fcntl  spwd  grp  select  _csv  _socket  _posixsubprocess  _md5  _sha1  _sha256  _sha512  _sha3  _blake2  syslog  binascii  zlib  posix  errno  pwd  _sre  _codecs  _weakref  _functools  _operator  _collections  _abc  itertools  atexit  _signal  _stat  time  _thread  _locale  _io  faulthandler  _tracemalloc  _symtable  pyexpat  xxsubtype"
    MODDISABLED_NAMES = ""
    MODLIBS = "-lexpat                       -L/usr/lib -lz                       -lexpat"
    MODOBJS = "$(sort   Modules/arraymodule.o  Modules/cmathmodule.o Modules/_math.o  Modules/mathmodule.o Modules/_math.o  Modules/_struct.o  Modules/_randommodule.o  Modules/_elementtree.o  Modules/_pickle.o  Modules/_datetimemodule.o  Modules/_bisectmodule.o  Modules/_heapqmodule.o  Modules/_statisticsmodule.o  Modules/unicodedata.o  Modules/fcntlmodule.o  Modules/spwdmodule.o  Modules/grpmodule.o  Modules/selectmodule.o  Modules/_csv.o  Modules/socketmodule.o  Modules/_posixsubprocess.o  Modules/md5module.o  Modules/sha1module.o  Modules/sha256module.o  Modules/sha512module.o  Modules/sha3module.o  Modules/blake2module.o Modules/blake2b_impl.o Modules/blake2s_impl.o  Modules/syslogmodule.o  Modules/binascii.o  Modules/zlibmodule.o  Modules/posixmodule.o  Modules/errnomodule.o  Modules/pwdmodule.o  Modules/_sre.o  Modules/_codecsmodule.o  Modules/_weakref.o  Modules/_functoolsmodule.o  Modules/_operator.o  Modules/_collectionsmodule.o  Modules/_abc.o  Modules/itertoolsmodule.o  Modules/atexitmodule.o  Modules/signalmodule.o  Modules/_stat.o  Modules/timemodule.o  Modules/_threadmodule.o  Modules/_localemodule.o  Modules/_iomodule.o Modules/iobase.o Modules/fileio.o Modules/bytesio.o Modules/bufferedio.o Modules/textio.o Modules/stringio.o  Modules/faulthandler.o  Modules/_tracemalloc.o  Modules/symtablemodule.o  Modules/pyexpat.o  Modules/xxsubtype.o)"
    MODULE_OBJS = "\"
    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 = ""
    OPENSSL_LDFLAGS = ""
    OPENSSL_LIBS = "-lssl -lcrypto"
    OPENSSL_RPATH = ""
    OPT = "-DNDEBUG -g -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 --timeout=1200"
    PTHREAD_KEY_T_IS_COMPATIBLE_WITH_INT = "1"
    PTHREAD_SYSTEM_SCHED_SUPPORTED = "1"
    PURIFY = ""
    PY3LIBRARY = "libpython3.so"
    PYLONG_BITS_IN_DIGIT = "0"
    PYTHON = "python"
    PYTHONFRAMEWORK = ""
    PYTHONFRAMEWORKDIR = "no-framework"
    PYTHONFRAMEWORKINSTALLDIR = ""
    PYTHONFRAMEWORKPREFIX = ""
    PYTHONPATH = ""
    PYTHON_FOR_BUILD = "./python -E"
    PYTHON_FOR_REGEN = ""
    PYTHON_HEADERS = "\"
    PYTHON_OBJS = "\"
    PY_BUILTIN_HASHLIB_HASHES = ""md5,sha1,sha256,sha512,sha3,blake2""
    PY_BUILTIN_MODULE_CFLAGS = "-Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g       -fstack-protector-strong -Wformat -Werror=format-security  -g -fwrapv -O2    -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden  -I../Include/internal -IObjects -IInclude -IPython -I. -I../Include -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPy_BUILD_CORE_BUILTIN"
    PY_CFLAGS = "-Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g       -fstack-protector-strong -Wformat -Werror=format-security  -g -fwrapv -O2   "
    PY_CFLAGS_NODIST = "-std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden  -I../Include/internal"
    PY_COERCE_C_LOCALE = "1"
    PY_CORE_CFLAGS = "-Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g       -fstack-protector-strong -Wformat -Werror=format-security  -g -fwrapv -O2    -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden  -I../Include/internal -IObjects -IInclude -IPython -I. -I../Include -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPy_BUILD_CORE"
    PY_CORE_LDFLAGS = "-Wl,-Bsymbolic-functions      -g -fwrapv -O2   "
    PY_CPPFLAGS = "-IObjects -IInclude -IPython -I. -I../Include -Wdate-time -D_FORTIFY_SOURCE=2"
    PY_ENABLE_SHARED = "1"
    PY_FORMAT_SIZE_T = ""z""
    PY_LDFLAGS = "-Wl,-Bsymbolic-functions      -g -fwrapv -O2   "
    PY_LDFLAGS_NODIST = ""
    PY_SSL_DEFAULT_CIPHERS = "1"
    PY_SSL_DEFAULT_CIPHER_STRING = "0"
    PY_STDMODULE_CFLAGS = "-Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g       -fstack-protector-strong -Wformat -Werror=format-security  -g -fwrapv -O2    -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden  -I../Include/internal -IObjects -IInclude -IPython -I. -I../Include -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC"
    Py_DEBUG = "0"
    Py_ENABLE_SHARED = "1"
    Py_HASH_ALGORITHM = "0"
    Py_TRACE_REFS = "0"
    QUICKTESTOPTS = "-x test_subprocess test_io test_lib2to3 \"
    READELF = "readelf"
    RESSRCDIR = "Mac/Resources/framework"
    RETSIGTYPE = "void"
    RUNSHARED = "LD_LIBRARY_PATH=/build/python3.10-AW9wLY/python3.10-3.10.12/build-shared"
    SCRIPTDIR = "/usr/lib"
    SETPGRP_HAVE_ARG = "0"
    SHELL = "/bin/sh"
    SHLIBS = "-lcrypt -ldl  -lm"
    SHLIB_SUFFIX = ".so"
    SHM_NEEDS_LIBRT = "0"
    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"
    SO = ".cpython-310-x86_64-linux-gnu.so"
    SOABI = "cpython-310-x86_64-linux-gnu"
    SRCDIRS = "Parser Objects Python Modules Modules/_io Programs"
    SRC_GDB_HOOKS = "../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"
    TCLTK_INCLUDES = "-I/usr/include/tcl8.6"
    TCLTK_LIBS = "-ltk8.6 -ltkstub8.6 -ltcl8.6 -ltclstub8.6"
    TESTOPTS = ""
    TESTPATH = ""
    TESTPYTHON = "LD_LIBRARY_PATH=/build/python3.10-AW9wLY/python3.10-3.10.12/build-shared ./python"
    TESTPYTHONOPTS = ""
    TESTRUNNER = "LD_LIBRARY_PATH=/build/python3.10-AW9wLY/python3.10-3.10.12/build-shared ./python ../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 = "/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo"
    UNICODE_DEPS = "\"
    UNIVERSALSDK = ""
    UPDATE_FILE = "../Tools/scripts/update_file.py"
    USE_COMPUTED_GOTOS = "1"
    VERSION = "3.10"
    VPATH = ".."
    WHEEL_PKG_DIR = "/usr/share/python-wheels/"
    WINDOW_HAS_FLAGS = "1"
    WITH_DECIMAL_CONTEXTVAR = "1"
    WITH_DOC_STRINGS = "1"
    WITH_DTRACE = "1"
    WITH_DYLD = "0"
    WITH_EDITLINE = "0"
    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 = "/build/python3.10-AW9wLY/python3.10-3.10.12/build-shared"
    abs_srcdir = "/build/python3.10-AW9wLY/python3.10-3.10.12/build-shared/.."
    base = "/usr"
    datarootdir = "/usr/share"
    exec_prefix = "/usr"
    installed_base = "/usr"
    installed_platbase = "/usr"
    multiarchsubdir = "/x86_64-linux-gnu"
    platbase = "/usr"
    platlibdir = "lib"
    prefix = "/usr"
    projectbase = "/usr/bin"
    py_version = "3.10.12"
    py_version_nodot = "310"
    py_version_nodot_plat = ""
    py_version_short = "3.10"
    srcdir = "/usr/lib/python3.10/config-3.10-x86_64-linux-gnu"
    userbase = "/home/fkluiben/.local"

Example pyproject.toml

Please see package configs in [this example project](https://github.com/FlowMatric/namespace_test)

Poetry Runtime Logs

It's not failing but...:

$ poetry -vvv install
Loading configuration file /home/fkluiben/.config/pypoetry/config.toml
[virtualenv] find interpreter for spec PythonSpec(path=/home/fkluiben/.local/pipx/venvs/poetry/bin/python)
[virtualenv] filesystem is case-sensitive
[virtualenv] discover exe for PythonInfo(spec=CPython3.10.12.final.0-64, exe=/home/fkluiben/.local/pipx/venvs/poetry/bin/python, platform=linux, version='3.10.12 (main, Jul 29 2024, 16:56:48) [GCC 11.4.0]', encoding_fs_io=utf-8-utf-8) in /usr
[filelock:filelock] Attempting to acquire lock 129208656615008 on /home/fkluiben/.local/share/virtualenv/py_info/1/8a94588eda9d64d9e9a351ab8144e55b1fabf5113b54e67dd26a8c27df0381b3.lock
[filelock:filelock] Lock 129208656615008 acquired on /home/fkluiben/.local/share/virtualenv/py_info/1/8a94588eda9d64d9e9a351ab8144e55b1fabf5113b54e67dd26a8c27df0381b3.lock
[virtualenv] got python info of %s from (PosixPath('/usr/bin/python3.10'), PosixPath('/home/fkluiben/.local/share/virtualenv/py_info/1/8a94588eda9d64d9e9a351ab8144e55b1fabf5113b54e67dd26a8c27df0381b3.json'))
[filelock:filelock] Attempting to release lock 129208656615008 on /home/fkluiben/.local/share/virtualenv/py_info/1/8a94588eda9d64d9e9a351ab8144e55b1fabf5113b54e67dd26a8c27df0381b3.lock
[filelock:filelock] Lock 129208656615008 released on /home/fkluiben/.local/share/virtualenv/py_info/1/8a94588eda9d64d9e9a351ab8144e55b1fabf5113b54e67dd26a8c27df0381b3.lock
[virtualenv] proposed PythonInfo(spec=CPython3.10.12.final.0-64, system=/usr/bin/python3.10, exe=/home/fkluiben/.local/pipx/venvs/poetry/bin/python, platform=linux, version='3.10.12 (main, Jul 29 2024, 16:56:48) [GCC 11.4.0]', encoding_fs_io=utf-8-utf-8)
[virtualenv] accepted PythonInfo(spec=CPython3.10.12.final.0-64, system=/usr/bin/python3.10, exe=/home/fkluiben/.local/pipx/venvs/poetry/bin/python, platform=linux, version='3.10.12 (main, Jul 29 2024, 16:56:48) [GCC 11.4.0]', encoding_fs_io=utf-8-utf-8)
[virtualenv] create virtual environment via CPython3Posix(dest=/home/fkluiben/git/namespace_test/lib_b/.venv, clear=False, no_vcs_ignore=False, global=False)
[virtualenv] create folder /home/fkluiben/git/namespace_test/lib_b/.venv/bin
[virtualenv] create folder /home/fkluiben/git/namespace_test/lib_b/.venv/lib/python3.10/site-packages
[virtualenv] write /home/fkluiben/git/namespace_test/lib_b/.venv/pyvenv.cfg
[virtualenv]    home = /usr/bin
[virtualenv]    implementation = CPython
[virtualenv]    version_info = 3.10.12.final.0
[virtualenv]    virtualenv = 20.26.3
[virtualenv]    include-system-site-packages = false
[virtualenv]    base-prefix = /usr
[virtualenv]    base-exec-prefix = /usr
[virtualenv]    base-executable = /usr/bin/python3.10
[virtualenv] symlink /usr/bin/python3.10 to /home/fkluiben/git/namespace_test/lib_b/.venv/bin/python
[virtualenv] create virtualenv import hook file /home/fkluiben/git/namespace_test/lib_b/.venv/lib/python3.10/site-packages/_virtualenv.pth
[virtualenv] create /home/fkluiben/git/namespace_test/lib_b/.venv/lib/python3.10/site-packages/_virtualenv.py
[virtualenv] ============================== target debug ==============================
[virtualenv] debug via /home/fkluiben/git/namespace_test/lib_b/.venv/bin/python /home/fkluiben/.local/pipx/venvs/poetry/lib/python3.10/site-packages/virtualenv/create/debug.py
[virtualenv] {
[virtualenv]   "sys": {
[virtualenv]     "executable": "/home/fkluiben/git/namespace_test/lib_b/.venv/bin/python",
[virtualenv]     "_base_executable": "/home/fkluiben/git/namespace_test/lib_b/.venv/bin/python",
[virtualenv]     "prefix": "/home/fkluiben/git/namespace_test/lib_b/.venv",
[virtualenv]     "base_prefix": "/usr",
[virtualenv]     "real_prefix": null,
[virtualenv]     "exec_prefix": "/home/fkluiben/git/namespace_test/lib_b/.venv",
[virtualenv]     "base_exec_prefix": "/usr",
[virtualenv]     "path": [
[virtualenv]       "/usr/lib/python310.zip",
[virtualenv]       "/usr/lib/python3.10",
[virtualenv]       "/usr/lib/python3.10/lib-dynload",
[virtualenv]       "/home/fkluiben/git/namespace_test/lib_b/.venv/lib/python3.10/site-packages"
[virtualenv]     ],
[virtualenv]     "meta_path": [
[virtualenv]       "<class '_virtualenv._Finder'>",
[virtualenv]       "<class '_frozen_importlib.BuiltinImporter'>",
[virtualenv]       "<class '_frozen_importlib.FrozenImporter'>",
[virtualenv]       "<class '_frozen_importlib_external.PathFinder'>"
[virtualenv]     ],
[virtualenv]     "fs_encoding": "utf-8",
[virtualenv]     "io_encoding": "utf-8"
[virtualenv]   },
[virtualenv]   "version": "3.10.12 (main, Jul 29 2024, 16:56:48) [GCC 11.4.0]",
[virtualenv]   "makefile_filename": "/usr/lib/python3.10/config-3.10-x86_64-linux-gnu/Makefile",
[virtualenv]   "os": "<module 'os' from '/usr/lib/python3.10/os.py'>",
[virtualenv]   "site": "<module 'site' from '/usr/lib/python3.10/site.py'>",
[virtualenv]   "datetime": "<module 'datetime' from '/usr/lib/python3.10/datetime.py'>",
[virtualenv]   "math": "<module 'math' (built-in)>",
[virtualenv]   "json": "<module 'json' from '/usr/lib/python3.10/json/__init__.py'>"
[virtualenv] }
[virtualenv] add seed packages via FromAppData(download=False, pip=bundle, setuptools=bundle, via=copy, app_data_dir=/home/fkluiben/.local/share/virtualenv)
[virtualenv] got embed update of distribution %s from ('setuptools', PosixPath('/home/fkluiben/.local/share/virtualenv/wheel/3.10/embed/3/setuptools.json'))
[virtualenv] got embed update of distribution %s from ('pip', PosixPath('/home/fkluiben/.local/share/virtualenv/wheel/3.10/embed/3/pip.json'))
[virtualenv] using periodically updated wheel /home/fkluiben/.local/share/virtualenv/wheel/house/setuptools-72.2.0-py3-none-any.whl
[virtualenv] using periodically updated wheel /home/fkluiben/.local/share/virtualenv/wheel/house/pip-24.2-py3-none-any.whl
[virtualenv] install setuptools from wheel /home/fkluiben/.local/share/virtualenv/wheel/house/setuptools-72.2.0-py3-none-any.whl via CopyPipInstall
[filelock:filelock] Attempting to acquire lock 129208656769760 on /home/fkluiben/.local/share/virtualenv/wheel/3.10/image/1/CopyPipInstall/setuptools-72.2.0-py3-none-any.lock
[virtualenv] install pip from wheel /home/fkluiben/.local/share/virtualenv/wheel/house/pip-24.2-py3-none-any.whl via CopyPipInstall
[filelock:filelock] Lock 129208656769760 acquired on /home/fkluiben/.local/share/virtualenv/wheel/3.10/image/1/CopyPipInstall/setuptools-72.2.0-py3-none-any.lock
[filelock:filelock] Attempting to acquire lock 129208656760976 on /home/fkluiben/.local/share/virtualenv/wheel/3.10/image/1/CopyPipInstall/pip-24.2-py3-none-any.lock
[filelock:filelock] Attempting to release lock 129208656769760 on /home/fkluiben/.local/share/virtualenv/wheel/3.10/image/1/CopyPipInstall/setuptools-72.2.0-py3-none-any.lock
[filelock:filelock] Lock 129208656769760 released on /home/fkluiben/.local/share/virtualenv/wheel/3.10/image/1/CopyPipInstall/setuptools-72.2.0-py3-none-any.lock
[filelock:filelock] Lock 129208656760976 acquired on /home/fkluiben/.local/share/virtualenv/wheel/3.10/image/1/CopyPipInstall/pip-24.2-py3-none-any.lock
[virtualenv] copy directory /home/fkluiben/.local/share/virtualenv/wheel/3.10/image/1/CopyPipInstall/setuptools-72.2.0-py3-none-any/_distutils_hack to /home/fkluiben/git/namespace_test/lib_b/.venv/lib/python3.10/site-packages/_distutils_hack
[filelock:filelock] Attempting to release lock 129208656760976 on /home/fkluiben/.local/share/virtualenv/wheel/3.10/image/1/CopyPipInstall/pip-24.2-py3-none-any.lock
[filelock:filelock] Lock 129208656760976 released on /home/fkluiben/.local/share/virtualenv/wheel/3.10/image/1/CopyPipInstall/pip-24.2-py3-none-any.lock
[virtualenv] copy /home/fkluiben/.local/share/virtualenv/wheel/3.10/image/1/CopyPipInstall/pip-24.2-py3-none-any/pip-24.2.virtualenv to /home/fkluiben/git/namespace_test/lib_b/.venv/lib/python3.10/site-packages/pip-24.2.virtualenv
[virtualenv] copy directory /home/fkluiben/.local/share/virtualenv/wheel/3.10/image/1/CopyPipInstall/pip-24.2-py3-none-any/pip to /home/fkluiben/git/namespace_test/lib_b/.venv/lib/python3.10/site-packages/pip
[virtualenv] copy directory /home/fkluiben/.local/share/virtualenv/wheel/3.10/image/1/CopyPipInstall/setuptools-72.2.0-py3-none-any/pkg_resources to /home/fkluiben/git/namespace_test/lib_b/.venv/lib/python3.10/site-packages/pkg_resources
[virtualenv] copy directory /home/fkluiben/.local/share/virtualenv/wheel/3.10/image/1/CopyPipInstall/setuptools-72.2.0-py3-none-any/setuptools to /home/fkluiben/git/namespace_test/lib_b/.venv/lib/python3.10/site-packages/setuptools
[virtualenv] copy directory /home/fkluiben/.local/share/virtualenv/wheel/3.10/image/1/CopyPipInstall/pip-24.2-py3-none-any/pip-24.2.dist-info to /home/fkluiben/git/namespace_test/lib_b/.venv/lib/python3.10/site-packages/pip-24.2.dist-info
[distlib:distlib.util] changing mode of /home/fkluiben/git/namespace_test/lib_b/.venv/bin/pip-3.10 to 775
[distlib:distlib.util] changing mode of /home/fkluiben/git/namespace_test/lib_b/.venv/bin/pip3.10 to 775
[distlib:distlib.util] changing mode of /home/fkluiben/git/namespace_test/lib_b/.venv/bin/pip to 775
[distlib:distlib.util] changing mode of /home/fkluiben/git/namespace_test/lib_b/.venv/bin/pip3 to 775
[virtualenv] generated console scripts pip-3.10 pip3.10 pip3 pip
[virtualenv] copy /home/fkluiben/.local/share/virtualenv/wheel/3.10/image/1/CopyPipInstall/setuptools-72.2.0-py3-none-any/setuptools-72.2.0.virtualenv to /home/fkluiben/git/namespace_test/lib_b/.venv/lib/python3.10/site-packages/setuptools-72.2.0.virtualenv
[virtualenv] copy directory /home/fkluiben/.local/share/virtualenv/wheel/3.10/image/1/CopyPipInstall/setuptools-72.2.0-py3-none-any/setuptools-72.2.0.dist-info to /home/fkluiben/git/namespace_test/lib_b/.venv/lib/python3.10/site-packages/setuptools-72.2.0.dist-info
[virtualenv] copy /home/fkluiben/.local/share/virtualenv/wheel/3.10/image/1/CopyPipInstall/setuptools-72.2.0-py3-none-any/distutils-precedence.pth to /home/fkluiben/git/namespace_test/lib_b/.venv/lib/python3.10/site-packages/distutils-precedence.pth
[virtualenv] generated console scripts 
[virtualenv] add activators for Bash, CShell, Fish, Nushell, PowerShell, Python
[virtualenv] write /home/fkluiben/git/namespace_test/lib_b/.venv/pyvenv.cfg
[virtualenv]    home = /usr/bin
[virtualenv]    implementation = CPython
[virtualenv]    version_info = 3.10.12.final.0
[virtualenv]    virtualenv = 20.26.3
[virtualenv]    include-system-site-packages = false
[virtualenv]    base-prefix = /usr
[virtualenv]    base-exec-prefix = /usr
[virtualenv]    base-executable = /usr/bin/python3.10
[virtualenv]    prompt = lib-b-py3.10
Using virtualenv: /home/fkluiben/git/namespace_test/lib_b/.venv
Installing dependencies from lock file

Finding the necessary packages for the current system

Package operations: 1 install, 0 updates, 0 removals

  - Installing lib-a (0.1.0 /home/fkluiben/git/namespace_test/lib_a/dist/lib_a-0.1.0-py3-none-any.whl)

Installing the current project: lib-b (0.1.0)
  - Building package lib-b in editable mode
  - Adding lib_b.pth to /home/fkluiben/git/namespace_test/lib_b/.venv/lib/python3.10/site-packages for /home/fkluiben/git/namespace_test/lib_b
  - Adding the lib_b-0.1.0.dist-info directory to /home/fkluiben/git/namespace_test/lib_b/.venv/lib/python3.10/site-packages
dimbleby commented 1 month ago

Poetry is doing an editable install. "The same way as pip" is not a goal, but pip install -e path is a closer equivalence.

Though nb there is more than one way to do an editable install, I forget which pip is likely to do or when that behaviour changed.

dimbleby commented 1 month ago

Also the way you have set up the packages key in your pyproject.toml files looks suspect.

Poetry itself makes use of namespace packages, you likely want to do the same thing that it and poetry-core do

patrickhulce commented 1 month ago

I'm glad I'm not the only one facing this 😅

If it helps anyone else searching, removing...

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

from pyproject.toml restored the correct behavior for packages with shared namespaces. You lose PEP 517 builds but the repo works again.

dimbleby commented 1 month ago

the right fix in the example of this issue is to correct the packages key, then everything works fine

patrickhulce commented 1 month ago

@dimbleby do you have any examples you can point us to with the correct setup? All examples I have found online thusfar result in the same issue described above.

dimbleby commented 1 month ago

read up

you likely want to do the same thing that it and poetry-core do

https://github.com/python-poetry/poetry-core/blob/bd1ce358dec403c66e62176b11bfad77a51aacfd/pyproject.toml#L15-L17

FlowMatric commented 1 month ago

Also the way you have set up the packages key in your pyproject.toml files looks suspect.

Poetry itself makes use of namespace packages, you likely want to do the same thing that it and poetry-core do

@dimbleby , thanks for your input so far. I am a bit at a loss now. You are right that it works perfectly fine with the configuration you proposed (see branch package_setup_2). I don't get it though because this is the setup that I started out with in a real-world project. I'll have to go back and better understand what is going on.

Maybe it's OK to keep the issue open until I can confirm that there is NO issue?

patrickhulce commented 1 month ago

Thanks for the direct link @dimbleby! That wasn't the part I had an issue with but was able to figure out a stray __init__.py in my linked venv was blowing things up.

@FlowMatric I found my difference by diffing the result of this script below with my existing env and found a lingering link in the poetry-managed venv in site-packages from before the multi-repo transition that contained an extra __init__.py at the namespace level. This extra __init__.py at the namespace level clobbers all previous subpackages in that namespace because the entire namespace gets treated as being sourced from that package instead of using the NamespaceLoader. In case it helps these were the various things that worked that seemed different from other examples I had tried (besides cheating by removing the poetry-core build backend).

Repro Script

#!/bin/bash

set -euxo pipefail

TEMP_DIR=$(mktemp -d)

mkdir -p $TEMP_DIR/package_a/src/namespace/a
mkdir -p $TEMP_DIR/package_b/src/namespace/b
mkdir -p $TEMP_DIR/package_c/src/namespace/c

touch $TEMP_DIR/package_a/src/namespace/a/__init__.py
touch $TEMP_DIR/package_b/src/namespace/b/__init__.py
touch $TEMP_DIR/package_c/src/namespace/c/__init__.py
touch $TEMP_DIR/package_c/src/namespace/__init__.py # <-- this was the problem

cat >> $TEMP_DIR/pyproject.toml <<EOF
[tool.poetry]
name = "PACKAGE_NAME_HERE"
version = "0.1.0"
description = "Test"
authors = ["Patrick Hulce <patrick.hulce@gmail.com>"]
packages = [
    { include = "INCLUDE_PATH", from = "src" },
]

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

[tool.poetry.dependencies]
python = "==3.11.*"
EOF

cp $TEMP_DIR/pyproject.toml $TEMP_DIR/package_a/pyproject.toml
echo "VALUE_A = 1" >> $TEMP_DIR/package_a/src/namespace/a/__init__.py
sed -i '' 's/PACKAGE_NAME_HERE/namespace-a/g' $TEMP_DIR/package_a/pyproject.toml
sed -i '' 's#INCLUDE_PATH#namespace/a#g' $TEMP_DIR/package_a/pyproject.toml

cp $TEMP_DIR/pyproject.toml $TEMP_DIR/package_b/pyproject.toml
echo "import namespace.a" >> $TEMP_DIR/package_b/src/namespace/b/__init__.py
echo "VALUE_B = 2" >> $TEMP_DIR/package_b/src/namespace/b/__init__.py
sed -i '' 's/PACKAGE_NAME_HERE/namespace-b/g' $TEMP_DIR/package_b/pyproject.toml
sed -i '' 's#INCLUDE_PATH#namespace/b#g' $TEMP_DIR/package_b/pyproject.toml
echo '"namespace.a" = { path = "../package_a", develop = true }' >> $TEMP_DIR/package_b/pyproject.toml

cp $TEMP_DIR/pyproject.toml $TEMP_DIR/package_c/pyproject.toml
touch $TEMP_DIR/package_c/src/namespace/c/__init__.py
echo "import namespace.a" >> $TEMP_DIR/package_c/src/namespace/c/run.py
echo "import namespace.b" >> $TEMP_DIR/package_c/src/namespace/c/run.py
echo "print(namespace.a.VALUE_A)" >> $TEMP_DIR/package_c/src/namespace/c/run.py
echo "print(namespace.b.VALUE_B)" >> $TEMP_DIR/package_c/src/namespace/c/run.py
sed -i '' 's/PACKAGE_NAME_HERE/namespace-c/g' $TEMP_DIR/package_c/pyproject.toml
sed -i '' 's#INCLUDE_PATH#namespace/c#g' $TEMP_DIR/package_c/pyproject.toml
echo '"namespace.a" = { path = "../package_a", develop = true }' >> $TEMP_DIR/package_c/pyproject.toml
echo '"namespace.b" = { path = "../package_b", develop = true }' >> $TEMP_DIR/package_c/pyproject.toml

set +e

cd $TEMP_DIR/package_b
poetry install
poetry run python -c 'import namespace.a; print(namespace.a.VALUE_A)'
poetry run python -c 'import namespace.b; print(namespace.b.VALUE_B)'

cd $TEMP_DIR/package_c
poetry install
poetry run python -c 'import namespace.a; print(namespace.a.VALUE_A)'
poetry run python -c 'import namespace.b; print(namespace.b.VALUE_B)'
poetry run python -m namespace.c.run
poetry run python src/namespace/c/run.py

With Accidental Extra init.py

# possible namespace for /project/packages/pkg1/src/namespace
# possible namespace for /project/packages/pkg2/src/namespace
# code object from /project/packages/pkg3/src/namespace/__init__.py
# created '/project/packages/pkg3/src/namespace/__pycache__/__init__.cpython-311.pyc'
import 'namespace' # <_frozen_importlib_external.SourceFileLoader object at 0x1025ea310>

Without Accidental Extra init.py

# possible namespace for /project/packages/pkg1/src/namespace
# possible namespace for /project/packages/pkg2/src/namespace
# possible namespace for /project/packages/pkg3/src/namespace
import 'namespace' # <_frozen_importlib_external.NamespaceLoader object at 0x104a61ad0>