Ticket #35332 (closed defect: fixed)
py-keyring will not install
| Reported by: | pavel.hlavnicka@… | Owned by: | and.damore@… |
|---|---|---|---|
| Priority: | Normal | Milestone: | |
| Component: | ports | Version: | 2.1.2 |
| Keywords: | Cc: | ||
| Port: | py-keyring |
Description (last modified by and.damore@…) (diff)
Have seen similar issues but no generic solution. Sorry for possible duplicate.
Running freshly installed Mac OS X 10.8
Issuing: sudo port install py-keyring breaks with
:info:build File "setup.py", line 24, in <module>
:info:build version = runcmd(['/usr/bin/xcodebuild', '-version'], {})[0].splitlines()[0]
:info:build IndexError: list index out of range
Attachments
Change History
comment:1 Changed 10 months ago by ryandesign@…
- Owner changed from macports-tickets@… to and.damore@…
The tclIndex error messages are unrelated to the problem and should be ignored.
This log contains lines that say "Skipping completed" so we cannot rely on its contents. Please "sudo port clean py27-keyring" and try again, then attach the new main.log file to this ticket if it fails again.
comment:2 Changed 10 months ago by pavel.hlavnicka@…
I did
sudo port clean py27-keyring sudo port clean py-keyring sudo port install py27-keyring
... and got the log as attached (main.2.log)
comment:3 in reply to: ↑ description Changed 10 months ago by kuenstler@…
I had a similar problem and solved it by doing the following in a terminal
cd /System/Library/Frameworks/Tcl.framework/Versions/8.5/Resources sudo ln -s Scripts/tclIndex .
comment:5 Changed 10 months ago by and.damore@…
- Description modified (diff)
Edited description to report the actual issue. Please provide the output of:
/usr/bin/xcodebuild -version
comment:6 follow-up: ↓ 7 Changed 10 months ago by pavel.hlavnicka@…
xxx:~ pavel$ /usr/bin/xcodebuild -version Xcode 4.4 Build version 4F250
comment:7 in reply to: ↑ 6 Changed 10 months ago by and.damore@…
Replying to pavel.hlavnicka@…:
xxx:~ pavel$ /usr/bin/xcodebuild -version Xcode 4.4 Build version 4F250
That output seems oddly sane (I expected it not to be).
This issue has been related to Xcode updating and to versiontools outdated install.
Please paste the output of the following commands, one per line:
xcode-select -print-path
port select --show python
which python
python -c "import subprocess; print(subprocess.Popen(['/usr/bin/xcodebuild', '-version'], env={}, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate())"
/usr/bin/xcode-select -print-path
comment:8 follow-up: ↓ 9 Changed 10 months ago by pavel.hlavnicka@…
xxx:~ pavel$ xcode-select -print-path
/Applications/Xcode.app/Contents/Developer
xxx:~ pavel$ port select --show python
The currently selected version for 'python' is 'python27'.
xxx:~ pavel$ which python
/opt/local/bin/python
xxx:~ pavel$ python --version
Python 2.7.3
xxx:~ pavel$ python -c "import subprocess; print(subprocess.Popen(['/usr/bin/xcodebuild', '-version'], env={}, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate())"
('Xcode 4.4\nBuild version 4F250\n', '')
xxx:~ pavel$ which xcodebuild
/usr/bin/xcodebuild
... I have just tried port install py-keyring on the same terminal as the above with the same issue in the log file... btw I'm quite savvy in osx and command line etc... not particularly in python/port files.... feel free to mail me and we can do some online session to investigate.
comment:9 in reply to: ↑ 8 ; follow-up: ↓ 10 Changed 10 months ago by and.damore@…
Replying to pavel.hlavnicka@…:
xxx:~ pavel$ xcode-select -print-path
/Applications/Xcode.app/Contents/Developer
xxx:~ pavel$ port select --show python
The currently selected version for 'python' is 'python27'.
xxx:~ pavel$ which python
/opt/local/bin/python
xxx:~ pavel$ python --version
Python 2.7.3
xxx:~ pavel$ python -c "import subprocess; print(subprocess.Popen(['/usr/bin/xcodebuild', '-version'], env={}, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate())"
('Xcode 4.4\nBuild version 4F250\n', '')
xxx:~ pavel$ which xcodebuild
/usr/bin/xcodebuild
All your output seems safe, but the log error clearly indicates
IndexError: list index out of range'' on the runcmd() return value
so something is wrong while running setup.py
... I have just tried port install py-keyring on the same terminal as the above with the same issue in the log file
That's weird, py-keyring shouldn't build anything at all when not build a subport like py27-keyring
Retry building py-keyring cleaning the ports before
port clean py27-keyring py-keyring port -d install py-keyring
feel free to mail me and we can do some online session to investigate
I usually hang out on the IRC channel.
I'm attaching a portfile patch, please download port-py_keyring.diff, execute
cd $(port dir py-keyring) sudo port clean py27-keyring py-keyring patch -p0 <~/Downloads/port-py_keyring.diff sudo port -v build py27-keyring | grep commandRes
and paste the output.
comment:10 in reply to: ↑ 9 Changed 10 months ago by pavel.hlavnicka@…
Retry building py-keyring cleaning the ports before
port clean py27-keyring py-keyring port -d install py-keyring
gives the same error as we know it...
I'm attaching a portfile patch, please download port-py_keyring.diff, execute
cd $(port dir py-keyring) sudo port clean py27-keyring py-keyring patch -p0 <~/Downloads/port-py_keyring.diff sudo port -v build py27-keyring | grep commandRes
commandResult:tuple
commandResult[0]:str
commandResult[0].splitlines():list
print('commandResult[0].splitlines()[0]:' + type(commandResult[0].splitlines()[0]).__name__)
Error: org.macports.build for port py27-keyring returned: command execution failed
Error: Processing of port py27-keyring failed
HTH
comment:11 follow-up: ↓ 12 Changed 10 months ago by and.damore@…
Please run
port log py27-keyring > py27-keyring_python-output.txt
and paste the created file, I'd like to see the actual error when the script tries to index the list containing the splitted lines.
comment:12 in reply to: ↑ 11 Changed 10 months ago by and.damore@…
Changed 10 months ago by pavel.hlavnicka@…
- Attachment py27-keyring_python-output.txt added
port log py27-keyring output
comment:13 Changed 10 months ago by and.damore@…
Please download the attached file called port-py_keyring-print_list.diff and execute:
cd $(port dir py-keyring) patch -p0 -R <~/Downloads/port-py_keyring.diff #this reverts previous patch patch -p0 <~/Downloads/port-py_keyring-print_list.diff #this is basically the same patch but prints list's content sudo port clean py27-keyring sudo port -d build py27-keyring
then copy and paste lines nearby the error.
comment:14 follow-up: ↓ 15 Changed 9 months ago by pavel.hlavnicka@…
not sure if this is anyhow helpful... but if I run sudo port -d install py-keyring I got the well known error
DEBUG: Executing command line: cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_python_py-keyring/py27-keyring/work/keyring-0.6.2" && /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 setup.py --no-user-cfg build
Traceback (most recent call last):
File "setup.py", line 24, in <module>
version = runcmd(['/usr/bin/xcodebuild', '-version'], {})[0].splitlines()[0]
IndexError: list index out of range
but then if I did cd /opt/local.... from the failed command and then sudo /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 setup.py --no-user-cfg build from the command line, I got this
running build running build_py creating build creating build/lib.macosx-10.8-x86_64-2.7 creating build/lib.macosx-10.8-x86_64-2.7/keyring copying keyring/__init__.py -> build/lib.macosx-10.8-x86_64-2.7/keyring copying keyring/backend.py -> build/lib.macosx-10.8-x86_64-2.7/keyring copying keyring/cli.py -> build/lib.macosx-10.8-x86_64-2.7/keyring copying keyring/core.py -> build/lib.macosx-10.8-x86_64-2.7/keyring copying keyring/getpassbackend.py -> build/lib.macosx-10.8-x86_64-2.7/keyring copying keyring/http.py -> build/lib.macosx-10.8-x86_64-2.7/keyring creating build/lib.macosx-10.8-x86_64-2.7/keyring/tests copying keyring/tests/__init__.py -> build/lib.macosx-10.8-x86_64-2.7/keyring/tests copying keyring/tests/test_backend.py -> build/lib.macosx-10.8-x86_64-2.7/keyring/tests copying keyring/tests/test_cli.py -> build/lib.macosx-10.8-x86_64-2.7/keyring/tests copying keyring/tests/test_core.py -> build/lib.macosx-10.8-x86_64-2.7/keyring/tests copying keyring/tests/test_util.py -> build/lib.macosx-10.8-x86_64-2.7/keyring/tests creating build/lib.macosx-10.8-x86_64-2.7/keyring/util copying keyring/util/__init__.py -> build/lib.macosx-10.8-x86_64-2.7/keyring/util copying keyring/util/escape.py -> build/lib.macosx-10.8-x86_64-2.7/keyring/util creating build/lib.macosx-10.8-x86_64-2.7/keyring/backends copying keyring/backends/__init__.py -> build/lib.macosx-10.8-x86_64-2.7/keyring/backends running build_ext building 'osx_keychain' extension creating build/temp.macosx-10.8-x86_64-2.7 creating build/temp.macosx-10.8-x86_64-2.7/keyring creating build/temp.macosx-10.8-x86_64-2.7/keyring/backends /usr/bin/clang -fno-strict-aliasing -fno-common -dynamic -pipe -O2 -fwrapv -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/opt/local/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c keyring/backends/osx_keychain.c -o build/temp.macosx-10.8-x86_64-2.7/keyring/backends/osx_keychain.o /usr/bin/clang -bundle -undefined dynamic_lookup -L/opt/local/lib build/temp.macosx-10.8-x86_64-2.7/keyring/backends/osx_keychain.o -L/System/Library/Frameworks/ -o build/lib.macosx-10.8-x86_64-2.7/osx_keychain.so -framework Security -framework CoreFoundation -framework CoreServices
I'm not familiar with macports build process - so this observation can be meaning less - or it shows that the environment is somehow modified by invoking port install... compared to a vanilla command line. environment.
Can this help somehow?
comment:15 in reply to: ↑ 14 Changed 9 months ago by and.damore@…
Replying to pavel.hlavnicka@…:
it shows that the environment is somehow modified by invoking port install... compared to a vanilla command line. environment.
Indeed it is but your envinroment (that you can see in the debug output) is just good and actually it differs from mine only for the 10.7/10.8 and rsync/svn part.
I'd like to get the output I asked for in ticket:35332#comment:13 , the code block reverts previous patch and applies the new one to check what the failing list contains.
If the patch command with revert flag -R complains, for instance because you ran sync action since the portfile was last patched and the Portfile has therefore already been reverted, you can just skip that command.
comment:16 follow-up: ↓ 17 Changed 9 months ago by pavel.hlavnicka@…
Sorry, I did not notice comment 13 as I should have. If I ran all as described I got following
DEBUG: Executing command line: cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_python_py-keyring/py27-keyring/work/keyring-0.6.2" && /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 setup.py --no-user-cfg build
[]
Traceback (most recent call last):
File "setup.py", line 26, in <module>
version = commandResult[0].splitlines()[0]
IndexError: list index out of range
I believe the line containing solely '[]' is what you are looking for right? I'll attach the full log as well.
Changed 9 months ago by pavel.hlavnicka@…
- Attachment py-keyring-log-2012-08020.txt added
full log of sudo port -d build py27-keyring relevant to comment 13
comment:17 in reply to: ↑ 16 Changed 9 months ago by and.damore@…
Replying to pavel.hlavnicka@…:
I believe the line containing solely '[]' is what you are looking for right? I'll attach the full log as well.
Yes, and that empty list is odd since you've run that very same command explicitly and got correct output in ticket:35332#comment:8 . Unluckily I don't know what it is caused from and this kind of debugging is quite slow via tickets.
Since you're using Xcode 4.4+ you can set up a local repository and just skip the subprocess calling that is just needed to check the Xcode version.
I'm attaching a tar archive with such a patched port, create a python subdir in your local repository and extract the archive there. This is not a fix but a mean to let you install py-keyring meanwhile.
comment:18 Changed 9 months ago by pavel.hlavnicka@…
Thanks for this. Could you provide a path just dumping as much of the environment as possible? PATH, PYTHONPATH, current python interpreter (something like $0)... I did play with xcode-select a bit with no success. I have XCode3 installed concurrently, but I can not imagine how it could interfere.
comment:19 Changed 9 months ago by pavel.hlavnicka@…
BTW - just non-biased view - it may look like runcmd() is doing something else then we expect. The line reads commandResult = runcmd(['/usr/bin/xcodebuild', '-version'], {}) - the command is specified with the full path and the path contains a working xcodebuild version. Is not it possible that setup.py is invoking an another runcmd() imported, say, coincidentally?
comment:20 Changed 9 months ago by pavel.hlavnicka@…
SOLVED
ok... I did following, I have manually edited the latest patch
--- setup.py.orig 2011-08-03 22:08:15.000000000 +0200
+++ setup.py 2012-08-03 11:17:49.000000000 +0200
@@ -21,7 +21,9 @@
if sys.platform == 'darwin' and os.path.exists('/usr/bin/xcodebuild'):
# XCode 4.0 dropped support for ppc architecture, which is hardcoded in
# distutils.sysconfig
- version = runcmd(['/usr/bin/xcodebuild', '-version'], {})[0].splitlines()[0]
+ commandResult, err = runcmd(['/usr/bin/xcodebuild', '-version'], {})
+ print(err)
+ version = commandResult[0].splitlines()[0]
# Also parse only first digit, because 3.2.1 can't be parsed nicely
if (version.startswith('Xcode') and
StrictVersion(version.split()[1]) >= StrictVersion('4.0')):
... to see the error returned by runcmd - and I got following:
DEBUG: Executing command line: cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_python_py-keyring/py27-keyring/work/keyring-0.6.2" && /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 setup.py --no-user-cfg build
You have not agreed to the Xcode license agreements, please run 'xcodebuild -license' (for user-level acceptance) or 'sudo xcodebuild -license' (for system-wide acceptance) from within a Terminal window to review and agree to the Xcode license agreements.
Traceback (most recent call last):
File "setup.py", line 26, in <module>
version = commandResult[0].splitlines()[0]
after running the stated command as root sudo xcodebuild -license and agreed with the license all works just fine.
This must somehow relate to my upgrade to Mac OS X 10.8 and XCode 4.4.1 - I just wonder how it's possible it seems it was only me having this issue. Many thanks for all your support and I hope this will help someone. Perhaps the setup.py might be more descriptive on the error.
comment:21 Changed 9 months ago by and.damore@…
- Status changed from assigned to closed
- Resolution set to fixed
Wonderful, the issue wasn't py-keyring specific at last. I wonder why you had sane output when directly executing Subprocess' Popen() call.
As future reference cf. ProblemHotlist. I'm unsure about how to close this issue, I'm marking it as fixed even if it wasn't a port issue.
comment:22 Changed 9 months ago by pavel.hlavnicka@…
Executing the command manually was working because I did it as a normal user. Apple requires an another acceptance done by the superuser for "system wide" use. The problem was not in the environment but in general user permissions. I believe many people solve thos issue as soon as they try to use "sudo xcodebuild" in an another context. I just was not as lucky and the error was masked by overoptimistic setup.py. Again many thanks for your patience and help.


The log file