[Nix-dev] Python packages with __future__ imports broken by wrapper?

Spencer Whitt sw at swhitt.me
Thu May 21 21:11:57 CEST 2015


I still think the solution of wrapping the python interpreter rather than
the python script is more elegant. As far as I can tell, there's no real
downside to the approach and it avoids this problem entirely.

On Thu, May 21, 2015 at 12:15 PM, Domen Kožar <domen at dev.si> wrote:

> Are you using unstable branch or 14.12?
>
> I think we'll need to drop use of sed and go with Python AST parsing for
> injecting program name.
>
> On Thu, May 21, 2015 at 6:11 PM, Jeffrey David Johnson <jefdaj at gmail.com>
> wrote:
>
>> I installed python27Packages.googlecl, and when running `google` it says:
>>
>>   File
>> "/nix/store/1ksk91s0kd1sv2clrkwcvzcmr67smgps-python2.7-googlecl-0.9.14/bin/.google-wrapped",
>> line 45
>>     from __future__ import with_statement
>> SyntaxError: from __future__ imports must occur at the beginning of the
>> file
>>
>> Indeed, that file has 44 lines of other stuff first that looks like they
>> were added by a wrapper script:
>>
>> #!/nix/store/pbi1lgank10fy0xpjckbdpgacqw34dsz-python-2.7.9/bin/python2.7
>> #
>> # Copyright (C) 2010 Google Inc.
>> #
>> # Licensed under the Apache License, Version 2.0 (the "License");
>> # you may not use this file except in compliance with the License.
>> # You may obtain a copy of the License at
>> #
>> #      http://www.apache.org/licenses/LICENSE-2.0
>> #
>> # Unless required by applicable law or agreed to in writing, software
>> # distributed under the License is distributed on an "AS IS" BASIS,
>> # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
>> # See the License for the specific language governing permissions and
>> # limitations under the License.
>>
>>
>> import sys; sys.argv[0] = 'google'
>> """Main function for the Google command line tool, GoogleCL.
>>
>> This program provides some functionality for a number of Google services
>> from
>> the command line.
>>
>> Example usage (omitting the initial "./google"):
>>   # Create a photo album with tags "Vermont" and name "Summer Vacation
>> 2009"
>>   picasa create -n "Summer Vacation 2009" -t Vermont
>> ~/photos/vacation2009/*
>>
>>   # Post photos to an existing album
>>   picasa post -n "Summer Vacation 2008" ~/old_photos/*.jpg
>>
>>   # Download another user's albums whose titles match a regular expression
>>   picasa get --user my.friend.joe --name ".*computer.*"
>> ~/photos/joes_computer
>>
>>   # Delete some posts you accidentally put up
>>   blogger delete -n "Silly post, number [0-9]*"
>>
>>   # Post your latest film endeavor to YouTube
>>   youtube post --category Film --tag "Jane Austen, zombies"
>> ~/final_project.mp4
>>
>> Some terminology in use:
>>   service: The Google service being accessed (e.g. Picasa, Blogger,
>> YouTube).
>>   task: What the client wants done by the service (e.g. post, get,
>> delete).
>>
>> """
>> from __future__ import with_statement
>>
>> __author__ = 'tom.h.miller at gmail.com (Tom Miller)'
>> import glob
>> import logging
>> import optparse
>>
>>
>> I guess we need to move this line below any __future__ statements:
>>
>> import sys; sys.argv[0] = 'google'
>>
>> According to https://docs.python.org/2/reference/simple_stmts.html#future
>> the rest should be OK:
>>
>> A future statement must appear near the top of the module. The only lines
>> that can appear before a future statement are:
>>
>>     the module docstring (if any),
>>     comments,
>>     blank lines, and
>>     other future statements.
>>
>> Jeff
>> _______________________________________________
>> nix-dev mailing list
>> nix-dev at lists.science.uu.nl
>> http://lists.science.uu.nl/mailman/listinfo/nix-dev
>>
>
>
> _______________________________________________
> nix-dev mailing list
> nix-dev at lists.science.uu.nl
> http://lists.science.uu.nl/mailman/listinfo/nix-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.science.uu.nl/pipermail/nix-dev/attachments/20150521/395e95c1/attachment-0001.html 


More information about the nix-dev mailing list