[patch] always install python's eggs as unpacked files

Andrey Zonov andrey at zonov.org
Sun Aug 7 19:14:25 UTC 2011


Hi,

Thank you for you feedback. I've fixed that problem easier.
My point is that I don't want to fix all bad ports. I want to fix them 
all at once, completely.

Tomorrow I want to try to build all 400 python modules that use 
`easy_install' in my tinderbox with this patch.

-- 
Andrey Zonov


07.08.2011 22:11, Volodymyr Kostyrko пишет:
> 07.08.2011 14:24, Andrey Zonov wrote:
>> Hi,
>>
>> I've got two problems with python's eggs installed from ports.
>>
>> As you know, many eggs install from ports as archives and then
>> unprivileged pseudo-user tries to use them, it's got an error about
>> can't creating PYTHON_EGG_CACHE. That's OK, I've just set environment
>> "PYTHON_EGG_CACHE=/var/tmp" and all works quite well. But a week ago I
>> needed to run two daemons that use pymongo and I couldn't do this. The
>> first daemon created PYTHON_EGG_CACHE and unpacked pymongo, but the
>> second couldn't create PYTHON_EGG_CACHE because PYTHON_EGG_CACHE already
>> exists! Even though they both run as "nobody".
>>
>> The second problem with that behaviour is when you're installing some
>> python module from packages you need the Internet connection to get an
>> egg from site and build it on-the-fly.
>>
>> Please, inspect my patch. I think that's a good solution for that 
>> problems.
>
> I second this one, default behavior seems incorrect for me too.
>
> I've tested the patch against devel/py-greenlet an it works for me 
> with minor changes (commenting out PYDISTUTILS_INSTALLARGS).
>
-------------- next part --------------
--- /usr/ports/Mk/bsd.python.mk.orig	2011-08-03 01:14:21.000000000 +0000
+++ /usr/ports/Mk/bsd.python.mk	2011-08-07 19:03:13.000000000 +0000
@@ -460,7 +460,7 @@
 
 PYDISTUTILS_BUILD_TARGET?=		bdist_egg
 PYDISTUTILS_INSTALL_TARGET?=	easy_install
-PYDISTUTILS_INSTALLARGS?=		-O 1 -N -S ${PYTHON_SITELIBDIR} \
+PYDISTUTILS_INSTALLARGS?=		-Z --record ${TMPPLIST}.egg -O 1 -N -S ${PYTHON_SITELIBDIR} \
 								-d ${PYEASYINSTALL_SITELIBDIR} \
 								-s ${PYEASYINSTALL_BINDIR} \
 								${WRKSRC}/dist/${PYEASYINSTALL_EGG}
@@ -496,10 +496,14 @@
 add-plist-post: add-plist-easyinstall
 add-plist-easyinstall:
 	@# @unexec line must be located before any other line while @exec must not.
-	@${CAT} ${TMPPLIST} > ${TMPPLIST}.pei_tmp
+	@${TOUCH} ${TMPPLIST}.egg
+	@${SED} -i "" -e 's,^${PREFIX}/,,' ${TMPPLIST}.egg
+	@${GREP} -vx "${PYTHON_SITELIBDIR:S,${PREFIX}/,,}/${PYEASYINSTALL_EGG}" ${TMPPLIST} \
+		> ${TMPPLIST}.pei_tmp || ${TRUE}
 	@${ECHO_CMD} "@unexec ${PYEASYINSTALL_CMD} ${PYEASYINSTALL_UNINSTALLARGS}" \
 		> ${TMPPLIST}
-	@${CAT} ${TMPPLIST}.pei_tmp >> ${TMPPLIST}
+	@${SORT} -ru ${TMPPLIST}.egg ${TMPPLIST}.pei_tmp >> ${TMPPLIST}
+	@${ECHO_CMD} "@unexec ${RM} -rf ${PYTHON_SITELIBDIR}/${PYEASYINSTALL_EGG}" >> ${TMPPLIST}
 	@${ECHO_CMD} "@exec ${SETENV} PYTHONPATH=${PYEASYINSTALL_SITELIBDIR} \
 		${PYEASYINSTALL_CMD} ${PYEASYINSTALL_INSTALLARGS}" \
 		>> ${TMPPLIST}


More information about the freebsd-ports mailing list