On Oct 11, 2009, at 19:40, Jack Howarth wrote:

   The current behavior seems really confused. For example, if I have
python25 and python26 installed but only python26 activated, I can
install py25-setuptools with out errors being reported.

I don't know how that would be possible, since py25-setuptools depends on python25, by virtue of using the python25 portgroup.

$ port deps py25-setuptools
Full Name: py25-setuptools @0.6c9
Library Dependencies: python25

This means if you try to install py25-setuptools, and python25 is not installed, it will be installed first. Or if it is installed but inactive, it will be activated first. It should not be possible for the configure phase of py25-setuptools to begin unless python25 is installed and active.


However, if I execute...

sudo port install py25-pmw

I get an error...

DEBUG: Found Dependency: receipt exists for python26
--->  Activating py25-pmw @1.3.2_1
DEBUG: Image error: /opt/local/Library/Frameworks/Python.framework/ Versions/2.6/lib/python2.6/site-packages/Pmw/__init__.py is being used by the active py26-pmw port. Please deactivate this port first, or use 'port -f activate py25-pmw' to force the activation.
   while executing
"_activate_contents $name $imagefiles $imagedir"
   (procedure "portimage::activate" line 56)
   invoked from within
"registry_activate $name ${version}_${revision}${portvariants} [array get user_options]"
   (procedure "eval_targets" line 21)
   invoked from within
"eval_targets activate"
   invoked from within
"$workername eval eval_targets $target"
   (procedure "mportexec" line 85)
   invoked from within
"mportexec $workername $target"

That sounds pretty bad. It sounds like py25-pmw somehow decided it should use python26, which of course it shouldn't. Do you have python_select installed? If so, which python is selected? This "select" business has always seemed problematic to me, because some ports (perhaps py*-pmw among them) may use "python" instead of using the correct versioned executable like "python26" and it might therefore lead to an error like this if you were installing a python26 module but python25 was "select"ed.


If I follow the recommendation and execute...

sudo port -f activate py25-pmw

It's not a recommendation! The "-f" flag should always only be used if you know what you're doing. Perhaps the message should be revised to read

"Please deactivate this port first, or use 'port -f activate py25-pmw' to force the activation if you know what you're doing."

The recommendation was to "deactivate this port first" but even that's not applicable here, since clearly a python25 module should not be installing anything into the python26 directories.


I get errors...

Warning: File /opt/local/Library/Frameworks/Python.framework/ Versions/2.6/lib/python2.6/site-packages/Pmw/__init__.py already exists. Moving to: /opt/local/Library/Frameworks/Python.framework/ Versions/2.6/lib/python2.6/site-packages/Pmw/ __init__.py.mp_1255307467.
etc.

That's a warning, not an error. It is informative to you, letting you know that because you requested the activation to be forced, the conflicting files were moved away. You may delete these moved files if you don't want them. They are now disconnected from any notion of having once belonged to any port, so MacPorts will not be cleaning them up for you.


The logic of maintaining multiple pythons seem horribly convoluted and very fragile (at least if you follow the recommendations in the error messages).

Perhaps the error messages need to be revised to clarify what is and what is not a recommendation.


Wouldn't it be better to just have any Portfile that needs access to python25 or python26, explicitly depend on it and, if not activated, allow port to request
for and implement the activation in real time during the build?

The current code should already be doing this. I cannot explain why it did not for you.


_______________________________________________
macports-dev mailing list
[email protected]
http://lists.macosforge.org/mailman/listinfo.cgi/macports-dev

Reply via email to