Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Poetry Virtual environment breaks shared namespaces #9684

Open
FlowMatric opened this issue Sep 12, 2024 · 8 comments
Open

Poetry Virtual environment breaks shared namespaces #9684

FlowMatric opened this issue Sep 12, 2024 · 8 comments
Labels
area/venv Related to virtualenv management kind/bug Something isn't working as expected status/triage This issue needs to be triaged

Comments

@FlowMatric
Copy link

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
@FlowMatric FlowMatric added kind/bug Something isn't working as expected status/triage This issue needs to be triaged labels Sep 12, 2024
@dimbleby
Copy link
Contributor

dimbleby commented Sep 12, 2024

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
Copy link
Contributor

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
Copy link

patrickhulce commented Sep 13, 2024

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
Copy link
Contributor

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

@patrickhulce
Copy link

@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
Copy link
Contributor

dimbleby commented Sep 13, 2024

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
Copy link
Author

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
Copy link

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).

  • All packages use folder structure src/namespace/pkg, NO OTHER FILES/DIRS in src/ or namespace/
  • All packages use { include = "namespace/pkg", from "src" } in pyproject.toml
  • Clear out any old virtual environments (poetry env remove $(poetry env list))

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 <[email protected]>"]
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>

@Secrus Secrus added the area/venv Related to virtualenv management label Oct 13, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/venv Related to virtualenv management kind/bug Something isn't working as expected status/triage This issue needs to be triaged
Projects
None yet
Development

No branches or pull requests

4 participants