From alan.gauld at yahoo.co.uk Thu Aug 1 05:29:40 2019 From: alan.gauld at yahoo.co.uk (Alan Gauld) Date: Thu, 1 Aug 2019 10:29:40 +0100 Subject: [Tutor] Difference between decorator and inheritance In-Reply-To: References: Message-ID: On 31/07/2019 18:57, Gursimran Maken wrote: > Anyone could please let me know the difference between decorators and > inheritance in python. > > Both are required to add additional functionality to a method then why are > we having 2 separate things in python for doing same kind of work. Inheritance and decorators can both achieve similar results in that they provide a mechanism to alter the effect of a method, but they work very differently. In particular, decorators can be used outside of a class, on a normal function. They also work across multiple different classes whereas works within a single heirarchy to create a subtype structure (but see Mixins below). Also, inheritance is used for much more than modifying methods. You can add new methods and attributes and it also provides conceptual structure to your classes as well as being a tool for software reuse (probably its least useful, and most abused, function). Inheritance in other OOP languages is used for many other things too, especially as the mechanism that enables polymorphism, but that is less significant in Python. Where there is considerable overlap is in the use of mixin classes. Mixins are a form of inheritance which allow modification of methods in a way quite similar (from a users perspective) to decorators. The underlying mechanisms are different and decorators are more elegant, but the end result is similar. I'm not sure how much technical detail you wanted, so I'll leave it thee, if you want to dig into the inner mechanisms then ask for more details. -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos From sinardyxing at gmail.com Thu Aug 1 05:11:04 2019 From: sinardyxing at gmail.com (Sinardy Xing) Date: Thu, 1 Aug 2019 17:11:04 +0800 Subject: [Tutor] Create Logging module Message-ID: Hi, I am learning to create python logging. My goal is to create a logging module where I can use as decorator in my main app following is the logging code ---- start here--- import logging #DEBUG : Detailed information, typically of interest only when diagnosing problems. #INFO : Confirmation that things are working as expected. #WARNING (default): An indication that something unexpected happened, or indicative of some problem in the near future # (e.g. 'disk space low'). The software is still working as expected. #ERROR : Due to a more serious problem, the software has not been able to perform some function. #CRITICAL :A serious error, indicating that the program itself may be unable to continue running. from functools import wraps def logme(func_to_log): import logging #Without getLogger name it will log all in root logger = logging.getLogger(__name__) #Check log level within understanable parameter, set to INFO if is not permitable value def check_log_level(logleveltocheck): if any(logleveltocheck.upper() in lf for lf in ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL']): return logleveltocheck.upper() else: return 'INFO' log_file_level='INFO' #check_log_level('info') log_console_level='INFO' #check_log_level('info') #root level logger.setLevel('INFO') formatter = logging.Formatter('%(asctime)s :: %(name)s :: %(levelname)s :: %(message)s') #Read log file from parameter logfile='mylogfile.log' file_handler = logging.FileHandler(logfile) file_handler.setLevel(log_file_level) file_handler.setFormatter(formatter) stream_handler = logging.StreamHandler() stream_handler.setLevel(log_console_level) stream_handler.setFormatter(formatter) logger.addHandler() logger.addHandler(stream_handler) #this wraps is to make sure we are returning func_to_log instead of wrapper @wraps(func_to_log) def wrapper(*args, **kwargs): logger.info('Ran with args: {}, and kwargs: {}'.format(args, kwargs)) return func_to_log(*args, **kwargs) return wrapper def timer(func_to_log): import time #this wraps is to make sure we are returning func_to_log instead of wrapper @wraps(func_to_log) def wrapper(*args, **kwargs): t1 = time.time() result = func_to_log(*args, **kwargs) t2 = time.time() - t1 print('{} ran in {} sec'.format(func_to_log.__name__, t2)) return result --- end here--- following is my main app -- start here-- from loggingme import logme def say_hello(name, age): print('Hello {}, I am {}'.format(name, age)) #say_hello=logme(say_hello('Sinardy')) @logme say_hello('Tonny', 8) --- end here--- I have error look like in the wrapper. Can someone point to me where is the issue or is this the correct way to create logging module? PS: above code with python 3.7.4 Thank you. regards, C From steve at pearwood.info Thu Aug 1 08:41:50 2019 From: steve at pearwood.info (Steven D'Aprano) Date: Thu, 1 Aug 2019 22:41:50 +1000 Subject: [Tutor] Create Logging module In-Reply-To: References: Message-ID: <20190801124149.GB16011@ando.pearwood.info> On Thu, Aug 01, 2019 at 05:11:04PM +0800, Sinardy Xing wrote: > I have error look like in the wrapper. > > Can someone point to me where is the issue No, but you can. When the error occurs, Python will print a traceback containing a list of the lines of code being executed, and the final error. You should read that error, especially the last line, and it will tell you the line of code that failed and give you a clue why it failed. We can help you if you copy and paste the full traceback, starting with the line "Traceback..." to the end. Don't take a screen shot or photo and send that, instead copy and paste the text into your email. (P.S. please reply to the mailing list, not to me personally.) -- Steven From alan.gauld at yahoo.co.uk Thu Aug 1 12:13:41 2019 From: alan.gauld at yahoo.co.uk (Alan Gauld) Date: Thu, 1 Aug 2019 17:13:41 +0100 Subject: [Tutor] Create Logging module In-Reply-To: References: Message-ID: On 01/08/2019 10:11, Sinardy Xing wrote: > ---- start here--- > > import logging > > ..snip... > from functools import wraps > > def logme(func_to_log): > import logging You don't need the import, it's already done in the first line. > #Check log level within understanable parameter, set to INFO if is not > permitable value > def check_log_level(logleveltocheck): This looks like an indentation error? It should be at the same level as the import statement. > if any(logleveltocheck.upper() in lf for lf in ['DEBUG', > 'INFO', 'WARNING', 'ERROR', 'CRITICAL']): > return logleveltocheck.upper() Are you sure that is what you want? It seems very complicated unless you are allowing the user to supply an abbreviated form. Otherwise if logleveltocheck.upper() in ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL']: return logleveltocheck.upper() might be easier? > else > return 'INFO' > > log_file_level='INFO' #check_log_level('info') > log_console_level='INFO' #check_log_level('info') > > #root level > logger.setLevel('INFO') I'm not sure what this is supposed to be doing! > formatter = logging.Formatter('%(asctime)s :: %(name)s :: %(levelname)s > :: %(message)s') > > #Read log file from parameter > logfile='mylogfile.log' > file_handler = logging.FileHandler(logfile) > file_handler.setLevel(log_file_level) > file_handler.setFormatter(formatter) > > stream_handler = logging.StreamHandler() > stream_handler.setLevel(log_console_level) > stream_handler.setFormatter(formatter) > > logger.addHandler() > logger.addHandler(stream_handler) > > #this wraps is to make sure we are returning func_to_log instead of > wrapper > @wraps(func_to_log) > def wrapper(*args, **kwargs): > logger.info('Ran with args: {}, and kwargs: {}'.format(args, > kwargs)) > return func_to_log(*args, **kwargs) > > return wrapper -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos From __peter__ at web.de Thu Aug 1 12:36:53 2019 From: __peter__ at web.de (Peter Otten) Date: Thu, 01 Aug 2019 18:36:53 +0200 Subject: [Tutor] Create Logging module References: Message-ID: Sinardy Xing wrote: > following is my main app > > -- start here-- > from loggingme import logme > > def say_hello(name, age): > print('Hello {}, I am {}'.format(name, age)) > > #say_hello=logme(say_hello('Sinardy')) > @logme > say_hello('Tonny', 8) Isn't this a SyntaxError? You can decorate functions, not function calls: When Python finds a syntax error in your main script it won't proceed to run it and thus the bugs in modules that would be imported if the code were executed don't matter at this point. Try @logme def say_hello(name, age): print('Hello {}, I am {}'.format(name, age)) say_hello('Tonny', 8) From zebra05 at gmail.com Thu Aug 1 15:09:00 2019 From: zebra05 at gmail.com (Sithembewena L. Dube) Date: Thu, 1 Aug 2019 21:09:00 +0200 Subject: [Tutor] Python and Django dev available Message-ID: Hi everyone, I'm a developer with just over 10 years' experience under my belt. I've worked with many languages and frameworks, including the popular Django web framework. I'm currently in the market for remote opportunities. Please reply if looking for a resource. Serious enquiries only please. Kind regards, Sithembewena *Sent with Shift * From reavervoid at outlook.com Thu Aug 1 11:23:40 2019 From: reavervoid at outlook.com (Spencer Wannemacher) Date: Thu, 1 Aug 2019 15:23:40 +0000 Subject: [Tutor] Python code Message-ID: I'm new to python and I was trying to perform a simple one code. All that is included in the code is print(61). I save it as 61.py and change the directory before typing in python 61.py and I don't get an output. There is no error and the output is blank. Please let me know what I'm doing wrong. Thank you so much! Sent from Mail for Windows 10 From sinardyxing at gmail.com Thu Aug 1 09:35:02 2019 From: sinardyxing at gmail.com (Sinardy Xing) Date: Thu, 1 Aug 2019 21:35:02 +0800 Subject: [Tutor] Create Logging module In-Reply-To: <20190801124149.GB16011@ando.pearwood.info> References: <20190801124149.GB16011@ando.pearwood.info> Message-ID: Hi Steven, Thanks for your reply, I was copy and paste the code in the email as a text. I dont know why it becoming photo or screen shot when you view it ? When I run the module individually it is no error only when I use as decorator I have error. $ cat mainapp.py from loggingme import logme def say_hello(name, age): print('Hello {}, I am {}'.format(name, age)) @logme say_hello('Tonny', 8) $ python3 mainapp.py File "mainapp.py", line 8 say_hello('Tonny', 8) ^ SyntaxError: invalid syntax On Thu, Aug 1, 2019 at 8:42 PM Steven D'Aprano wrote: > On Thu, Aug 01, 2019 at 05:11:04PM +0800, Sinardy Xing wrote: > > > I have error look like in the wrapper. > > > > Can someone point to me where is the issue > > No, but you can. > > When the error occurs, Python will print a traceback containing a list > of the lines of code being executed, and the final error. You should > read that error, especially the last line, and it will tell you the line > of code that failed and give you a clue why it failed. > > We can help you if you copy and paste the full traceback, starting with > the line "Traceback..." to the end. > > Don't take a screen shot or photo and send that, instead copy and paste > the text into your email. > > (P.S. please reply to the mailing list, not to me personally.) > > > -- > Steven > _______________________________________________ > Tutor maillist - Tutor at python.org > To unsubscribe or change subscription options: > https://mail.python.org/mailman/listinfo/tutor > From sinardyxing at gmail.com Thu Aug 1 11:21:49 2019 From: sinardyxing at gmail.com (Sinardy Xing) Date: Thu, 1 Aug 2019 23:21:49 +0800 Subject: [Tutor] Create Logging module In-Reply-To: <20190801124149.GB16011@ando.pearwood.info> References: <20190801124149.GB16011@ando.pearwood.info> Message-ID: Hi I solve my problem, the decorator need to be above the function not when executed. :) Thanks for reading. :) On Thu, Aug 1, 2019 at 8:42 PM Steven D'Aprano wrote: > On Thu, Aug 01, 2019 at 05:11:04PM +0800, Sinardy Xing wrote: > > > I have error look like in the wrapper. > > > > Can someone point to me where is the issue > > No, but you can. > > When the error occurs, Python will print a traceback containing a list > of the lines of code being executed, and the final error. You should > read that error, especially the last line, and it will tell you the line > of code that failed and give you a clue why it failed. > > We can help you if you copy and paste the full traceback, starting with > the line "Traceback..." to the end. > > Don't take a screen shot or photo and send that, instead copy and paste > the text into your email. > > (P.S. please reply to the mailing list, not to me personally.) > > > -- > Steven > _______________________________________________ > Tutor maillist - Tutor at python.org > To unsubscribe or change subscription options: > https://mail.python.org/mailman/listinfo/tutor > From cs at cskk.id.au Thu Aug 1 18:10:05 2019 From: cs at cskk.id.au (Cameron Simpson) Date: Fri, 2 Aug 2019 08:10:05 +1000 Subject: [Tutor] Python code In-Reply-To: References: Message-ID: <20190801221005.GA10958@cskk.homeip.net> On 01Aug2019 15:23, Spencer Wannemacher wrote: >I'm new to python and I was trying to perform a simple one code. All >that is included in the code is print(61). I save it as 61.py and >change the directory before typing in python 61.py and I don't get an >output. There is no error and the output is blank. Please let me know >what I'm doing wrong. Thank you so much! Can you confirm that your entire "61.py" file is this: print(61) That should print a "61" on the output, as I think you expected. Can you confirm your operating system? I'm guessing Windows, but a detailed description would be helpful. Are you are typing "python 61.py" at the shell prompt (I presume Windows' CMD.EXE prompt)? And not to some other interface? It is my recollection that "python" isn't a command under windows, there's a "py" command (I'm not on Windows here). So it may be that when you issue the command "python" it isn't running the Python interpreter but something else. Cheers, Cameron Simpson From PyTutor at DancesWithMice.info Thu Aug 1 19:22:51 2019 From: PyTutor at DancesWithMice.info (David L Neil) Date: Fri, 2 Aug 2019 11:22:51 +1200 Subject: [Tutor] Python code In-Reply-To: References: Message-ID: On 2/08/19 3:23 AM, Spencer Wannemacher wrote: > I'm new to python and I was trying to perform a simple one code. All that is included in the code is print(61). I save it as 61.py and change the directory before typing in python 61.py and I don't get an output. There is no error and the output is blank. Please let me know what I'm doing wrong. Thank you so much! What do you mean by "and change the directory before"? Python will start searching for 61.py in the *current* directory! -- Regards =dn From david at graniteweb.com Thu Aug 1 19:27:53 2019 From: david at graniteweb.com (David Rock) Date: Thu, 1 Aug 2019 18:27:53 -0500 Subject: [Tutor] Python code In-Reply-To: References: Message-ID: <19E4E509-A853-4462-AE23-688C736B8E84@graniteweb.com> maybe a copy/paste of your terminal session so we can see the text of the steps you are actually performing will give use some clues. ? David > On Aug 1, 2019, at 18:22, David L Neil wrote: > > On 2/08/19 3:23 AM, Spencer Wannemacher wrote: >> I'm new to python and I was trying to perform a simple one code. All that is included in the code is print(61). I save it as 61.py and change the directory before typing in python 61.py and I don't get an output. There is no error and the output is blank. Please let me know what I'm doing wrong. Thank you so much! > > > What do you mean by "and change the directory before"? > > Python will start searching for 61.py in the *current* directory! > > -- > Regards =dn > _______________________________________________ > Tutor maillist - Tutor at python.org > To unsubscribe or change subscription options: > https://mail.python.org/mailman/listinfo/tutor From nathan-tech at hotmail.com Thu Aug 1 18:10:02 2019 From: nathan-tech at hotmail.com (nathan tech) Date: Thu, 1 Aug 2019 22:10:02 +0000 Subject: [Tutor] just a quick logic check if someone has two seconds Message-ID: Hi there, I wondered if someone wouldn't mind just taking two seconds to make sure i understand this concept: Here is a code snippet: import speedtest def do-test(): test=speedtest.Speedtest() test.download() test.upload() return [test.download_speed, test.upload_speed] Now. If I was to put this into a GUI application, I was thinking of having it something like this: user clicks button, button calls function which: 1. Shows the screen which updates with test status. 2, does: results=do_test() 3. Updates the screen with the contents of results. Here's my question: If the user clicks the button, say, 3 times, will I have three separate speedtest objects? or will the python garbage collector clean them up for me so I only have one, which gets cleaned when do_test returns. Thanks for the answer in advance. Nathan From alan.gauld at yahoo.co.uk Thu Aug 1 20:27:40 2019 From: alan.gauld at yahoo.co.uk (Alan Gauld) Date: Fri, 2 Aug 2019 01:27:40 +0100 Subject: [Tutor] just a quick logic check if someone has two seconds In-Reply-To: References: Message-ID: On 01/08/2019 23:10, nathan tech wrote: > > import speedtest This is not a standard library module so I have no idea what it does so obviously there could be magic afoot of which I am unaware. But assuming it behaves like most Python code... > def do-test(): > test=speedtest.Speedtest() > test.download() > test.upload() > return [test.download_speed, test.upload_speed] test is garbage collected sat this point since it goes out of scope and the returned values are passed to the caller. Note that the returned values are not part of the test object. The test attributes refer to those values but it is the values themselves that are returned. > Now. If I was to put this into a GUI application, I was thinking of > having it something like this: The fact it is a GUI is completely irrelevant. There is nothing special about how a GUI calls a function. > user clicks button, > button calls function which: > > 1. Shows the screen which updates with test status. > 2, does: results=do_test() > 3. Updates the screen with the contents of results. The fact that the GUI calls this function is irrelevant. A function gets called and performs some actions. One of which is to call do_test(). It would be exactly the same if you did this: for n in range(3): result = do_test() print(result) You still call the function repeatedly. > If the user clicks the button, say, 3 times, will I have three separate > speedtest objects? You will have created 3 separate speedtest instances and each will have been garbage collected when do_test() terminated. So you will have no speedtest instances left hanging around. > or will the python garbage collector clean them up for me so I only have > one, which gets cleaned when do_test returns. You only ever have one at a time during the execution of do_test(). You have a total of 3 during your programs lifetime. (or however many times you click the button!) -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos From sinardyxing at gmail.com Fri Aug 2 00:46:16 2019 From: sinardyxing at gmail.com (Sinardy Xing) Date: Fri, 2 Aug 2019 12:46:16 +0800 Subject: [Tutor] Create Logging module In-Reply-To: References: Message-ID: Thanks Alan, I learn alot. logger.setLevel('INFO') <----- If I did not include this in the code it not generating any log I am confuse because I have setLevel to file_handler and to stream_handler file_handler.setLevel('DEBUG') stream_handler.setLevel('DEBUG') On Fri, Aug 2, 2019 at 12:14 AM Alan Gauld via Tutor wrote: > On 01/08/2019 10:11, Sinardy Xing wrote: > > > ---- start here--- > > > > import logging > > > > ..snip... > > > > from functools import wraps > > > > def logme(func_to_log): > > import logging > > You don't need the import, it's already done in the first line. > > > > #Check log level within understanable parameter, set to INFO if is > not > > permitable value > > def check_log_level(logleveltocheck): > > This looks like an indentation error? > It should be at the same level as the import statement. > > > if any(logleveltocheck.upper() in lf for lf in ['DEBUG', > > 'INFO', 'WARNING', 'ERROR', 'CRITICAL']): > > return logleveltocheck.upper() > > Are you sure that is what you want? It seems very complicated unless you > are allowing the user to supply an abbreviated form. Otherwise > > if logleveltocheck.upper() in ['DEBUG', 'INFO', 'WARNING', > 'ERROR', 'CRITICAL']: > return logleveltocheck.upper() > > might be easier? > > > else > > return 'INFO' > > > > log_file_level='INFO' #check_log_level('info') > > log_console_level='INFO' #check_log_level('info') > > > > #root level > > logger.setLevel('INFO') > > I'm not sure what this is supposed to be doing! > > > formatter = logging.Formatter('%(asctime)s :: %(name)s :: > %(levelname)s > > :: %(message)s') > > > > #Read log file from parameter > > logfile='mylogfile.log' > > file_handler = logging.FileHandler(logfile) > > file_handler.setLevel(log_file_level) > > file_handler.setFormatter(formatter) > > > > stream_handler = logging.StreamHandler() > > stream_handler.setLevel(log_console_level) > > stream_handler.setFormatter(formatter) > > > > logger.addHandler() > > logger.addHandler(stream_handler) > > > > #this wraps is to make sure we are returning func_to_log instead of > > wrapper > > @wraps(func_to_log) > > def wrapper(*args, **kwargs): > > logger.info('Ran with args: {}, and kwargs: {}'.format(args, > > kwargs)) > > return func_to_log(*args, **kwargs) > > > > return wrapper > > -- > Alan G > Author of the Learn to Program web site > http://www.alan-g.me.uk/ > http://www.amazon.com/author/alan_gauld > Follow my photo-blog on Flickr at: > http://www.flickr.com/photos/alangauldphotos > > > _______________________________________________ > Tutor maillist - Tutor at python.org > To unsubscribe or change subscription options: > https://mail.python.org/mailman/listinfo/tutor > From sinardyxing at gmail.com Fri Aug 2 02:36:25 2019 From: sinardyxing at gmail.com (Sinardy Xing) Date: Fri, 2 Aug 2019 14:36:25 +0800 Subject: [Tutor] Create Logging module In-Reply-To: References: Message-ID: Thank you Alan, ----- from previous mail ---- > if any(logleveltocheck.upper() in lf for lf in ['DEBUG', > 'INFO', 'WARNING', 'ERROR', 'CRITICAL']): > return logleveltocheck.upper() Are you sure that is what you want? It seems very complicated unless you are allowing the user to supply an abbreviated form. Otherwise if logleveltocheck.upper() in ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL']: return logleveltocheck.upper() might be easier? > else > return 'INFO' > > log_file_level='INFO' #check_log_level('info') > log_console_level='INFO' #check_log_level('info') > > #root level > logger.setLevel('INFO') I'm not sure what this is supposed to be doing! ------ end ---- I am thinking about a module where user can change the logging mode and doing so without modifying code, I am thinking to extend it with parameter module. I seen many software that if user set logging Level 1,2,3,4 or support mode, then application will create more information in the log file accordingly. The method I am using most likely is wrong. I dont know where should I trigger the log Level to achieve parameterize logging mode. I have one question I have following set stream_handler.setLevel('INFO') <--- handler to console file_handler.setLevel('INFO') <---- handler to file both are added to logger logger.addHandler(file_handler) logger.addHandler(stream_handler) If I did not set the logger.setLevel like following logger.setLevel('INFO') the logger unable to process logger.info('Current log level is : {}'.format(logger.level)) ----> return 10 if logger.setLevel('DEBUG') if not My question is what is the different between stream_handler.setLevel('INFO') and logger.setLevel('INFO') Why do we need logger.setLevel('INFO') if we stated following stream_handler.setLevel('INFO') <--- handler to console file_handler.setLevel('INFO') <---- handler to file --- complete code import logging #DEBUG : Detailed information, typically of interest only when diagnosing problems. #INFO : Confirmation that things are working as expected. #WARNING (default): An indication that something unexpected happened, or indicative of some problem in the near future # (e.g. 'disk space low'). The software is still working as expected. #ERROR : Due to a more serious problem, the software has not been able to perform some function. #CRITICAL :A serious error, indicating that the program itself may be unable to continue running. from functools import wraps def logme(orig_func): #Without getLogger name it will log all in root logger = logging.getLogger(__name__) #Check log level within understanable parameter, set to INFO if is not permitable value def check_log_level(logleveltocheck): #as per advised from Alan Gauld @python.org if logleveltocheck.upper() in ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL']: return logleveltocheck.upper() else: return 'INFO' log_file_level='INFO' #check_log_level('info') log_console_level='INFO' #check_log_level('info') #root level logger.setLevel('DEBUG') formatter = logging.Formatter('%(asctime)s :: %(name)s :: %(levelname)s :: %(message)s') #Read log file from parameter logfile='mylogfile.log' file_handler = logging.FileHandler(logfile) file_handler.setLevel(log_file_level) file_handler.setFormatter(formatter) stream_handler = logging.StreamHandler() stream_handler.setLevel(log_console_level) stream_handler.setFormatter(formatter) logger.addHandler(file_handler) logger.addHandler(stream_handler) #this wraps is to make sure we are returning orig_func instead of wrapper @wraps(orig_func) def wrapper(*args, **kwargs): logger.info('Ran with args: {}, and kwargs: {}'.format(args, kwargs)) logger.info('Current log level is : {}'.format(logger.level)) return orig_func(*args, **kwargs) return wrapper def timer(orig_func): import time #this wraps is to make sure we are returning orig_func instead of wrapper @wraps(orig_func) def wrapper(*args, **kwargs): t1 = time.time() result = orig_func(*args, **kwargs) t2 = time.time() - t1 print('{} ran in {} sec'.format(orig_func.__name__, t2)) return result @logme def hello(name, age): print('I am {}, and I am {} years old'.format(name, age)) hello('Peter Parker', 20) On Fri, Aug 2, 2019 at 12:14 AM Alan Gauld via Tutor wrote: > On 01/08/2019 10:11, Sinardy Xing wrote: > > > ---- start here--- > > > > import logging > > > > ..snip... > > > > from functools import wraps > > > > def logme(func_to_log): > > import logging > > You don't need the import, it's already done in the first line. > > > > #Check log level within understanable parameter, set to INFO if is > not > > permitable value > > def check_log_level(logleveltocheck): > > This looks like an indentation error? > It should be at the same level as the import statement. > > > if any(logleveltocheck.upper() in lf for lf in ['DEBUG', > > 'INFO', 'WARNING', 'ERROR', 'CRITICAL']): > > return logleveltocheck.upper() > > Are you sure that is what you want? It seems very complicated unless you > are allowing the user to supply an abbreviated form. Otherwise > > if logleveltocheck.upper() in ['DEBUG', 'INFO', 'WARNING', > 'ERROR', 'CRITICAL']: > return logleveltocheck.upper() > > might be easier? > > > else > > return 'INFO' > > > > log_file_level='INFO' #check_log_level('info') > > log_console_level='INFO' #check_log_level('info') > > > > #root level > > logger.setLevel('INFO') > > I'm not sure what this is supposed to be doing! > > > formatter = logging.Formatter('%(asctime)s :: %(name)s :: > %(levelname)s > > :: %(message)s') > > > > #Read log file from parameter > > logfile='mylogfile.log' > > file_handler = logging.FileHandler(logfile) > > file_handler.setLevel(log_file_level) > > file_handler.setFormatter(formatter) > > > > stream_handler = logging.StreamHandler() > > stream_handler.setLevel(log_console_level) > > stream_handler.setFormatter(formatter) > > > > logger.addHandler() > > logger.addHandler(stream_handler) > > > > #this wraps is to make sure we are returning func_to_log instead of > > wrapper > > @wraps(func_to_log) > > def wrapper(*args, **kwargs): > > logger.info('Ran with args: {}, and kwargs: {}'.format(args, > > kwargs)) > > return func_to_log(*args, **kwargs) > > > > return wrapper > > -- > Alan G > Author of the Learn to Program web site > http://www.alan-g.me.uk/ > http://www.amazon.com/author/alan_gauld > Follow my photo-blog on Flickr at: > http://www.flickr.com/photos/alangauldphotos > > > _______________________________________________ > Tutor maillist - Tutor at python.org > To unsubscribe or change subscription options: > https://mail.python.org/mailman/listinfo/tutor > From nathan-tech at hotmail.com Fri Aug 2 05:06:45 2019 From: nathan-tech at hotmail.com (nathan tech) Date: Fri, 2 Aug 2019 09:06:45 +0000 Subject: [Tutor] just a quick logic check if someone has two seconds In-Reply-To: References: Message-ID: Hi Alan, thanks for that! I realise I provided quite a lot of unnecessary info, but I've been bitten a few times with the not providing enough so thought it best. Thanks again for confirming my thoughts, that's very helpful. Nate On 02/08/2019 01:27, Alan Gauld via Tutor wrote: > On 01/08/2019 23:10, nathan tech wrote: > >> import speedtest > This is not a standard library module so I have no idea > what it does so obviously there could be magic afoot of > which I am unaware. But assuming it behaves like most > Python code... > >> def do-test(): >> test=speedtest.Speedtest() >> test.download() >> test.upload() >> return [test.download_speed, test.upload_speed] > test is garbage collected sat this point since it > goes out of scope and the returned values are passed > to the caller. Note that the returned values are not > part of the test object. The test attributes refer to > those values but it is the values themselves that > are returned. > >> Now. If I was to put this into a GUI application, I was thinking of >> having it something like this: > The fact it is a GUI is completely irrelevant. > There is nothing special about how a GUI calls a function. > >> user clicks button, >> button calls function which: >> >> 1. Shows the screen which updates with test status. >> 2, does: results=do_test() >> 3. Updates the screen with the contents of results. > The fact that the GUI calls this function is irrelevant. > A function gets called and performs some actions. > One of which is to call do_test(). It would be exactly the same if you > did this: > > for n in range(3): > result = do_test() > print(result) > > You still call the function repeatedly. > >> If the user clicks the button, say, 3 times, will I have three separate >> speedtest objects? > You will have created 3 separate speedtest instances and each > will have been garbage collected when do_test() terminated. > So you will have no speedtest instances left hanging around. > >> or will the python garbage collector clean them up for me so I only have >> one, which gets cleaned when do_test returns. > You only ever have one at a time during the execution of do_test(). > You have a total of 3 during your programs lifetime. (or however many > times you click the button!) > > From mats at wichmann.us Fri Aug 2 09:44:17 2019 From: mats at wichmann.us (Mats Wichmann) Date: Fri, 2 Aug 2019 07:44:17 -0600 Subject: [Tutor] Difference between decorator and inheritance In-Reply-To: References: Message-ID: <9bb98c72-475e-4b8f-e622-77f08af3c708@wichmann.us> On 7/31/19 11:57 AM, Gursimran Maken wrote: > Hi, > > Anyone could please let me know the difference between decorators and > inheritance in python. > > Both are required to add additional functionality to a method then why are > we having 2 separate things in python for doing same kind of work. I started to write something here several times and never felt like I got it right. Let me try once more without fussing too much. Python's decorators feel like a "local" thing - I have some code, and I want to make some change to it. Most often this comes up in predefined scenarios - I enable one of my functions to be line-profiled by decorating with @profile. I turn an attribute into a getter by using @property. I decorate to time a function. I decorate to add caching (memoizing) capability (@functools.lru_cache). If doesn't _have_ to be local; if I wanted to wrap a function that is not in "my" code (e.g. from Python standard library, or some module that I've obtained from the internet) I can, although the convenience form using @decorator doesn't really apply here since I don't want to modify "foreign" code; I have to use the underlying form of writing a function that generates and returns a function which augments the original function (that sounds so messy when you try to write it in English!). Inheritance is a more systematic building of relationships between classes - I can accomplish some of that with decorators, but not all. From bgailer at gmail.com Fri Aug 2 11:26:10 2019 From: bgailer at gmail.com (bob gailer) Date: Fri, 2 Aug 2019 11:26:10 -0400 Subject: [Tutor] Difference between decorator and inheritance In-Reply-To: References: Message-ID: <11739e3f-8363-7b5c-fd54-5909b454e414@gmail.com> And now for something completely different... Decorators are not required to return a function! I use them to create a dictionary that maps function names to the corresponding function object. This is very useful when associating actions with user-entered commands. Example: def collect(func=None, d={}): ??? if not func: return d ??? d[func.__name__] = func @collect def add(a,b): ??? return a+b # adds item to dictionary d (key = 'add', value = func) # repeat for other user-command functions # finally: cmd_dict = collect() # returns the dictionary cmd = input('enter a command>') func = cmd_dict.get(cmd) -- Bob Gailer From cs at cskk.id.au Fri Aug 2 18:52:45 2019 From: cs at cskk.id.au (Cameron Simpson) Date: Sat, 3 Aug 2019 08:52:45 +1000 Subject: [Tutor] Difference between decorator and inheritance In-Reply-To: <11739e3f-8363-7b5c-fd54-5909b454e414@gmail.com> References: <11739e3f-8363-7b5c-fd54-5909b454e414@gmail.com> Message-ID: <20190802225245.GA16327@cskk.homeip.net> On 02Aug2019 11:26, bob gailer wrote: >And now for something completely different... >Decorators are not required to return a function! >I use them to create a dictionary that maps function names to the >corresponding function object. That is an interesting idea! But I want to counter it, briefly. >This is very useful when associating actions with user-entered >commands. Example: > >def collect(func=None, d={}): >??? if not func: return d >??? d[func.__name__] = func > >@collect >def add(a,b): >??? return a+b > ># adds item to dictionary d (key = 'add', value = func) ># repeat for other user-command functions ># finally: >cmd_dict = collect() # returns the dictionary >cmd = input('enter a command>') >func = cmd_dict.get(cmd) I think you're conflating 2 things: having the decorator have a side effect outside the bare "do stuff around the call of an inner function", and returning a callable. The feature of your remark is the side effect, which is useful. Not returning a callable is orthognal, and a misfeature. Let me show you why: Python 3.7.4 (default, Jul 11 2019, 01:07:48) [Clang 8.0.0 (clang-800.0.42.1)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> d={} >>> def collect(f): d[f.__name__]=f ... >>> def g(x): print(x*2) ... >>> @collect ... def h(x): print(x*3) ... >>> g(8) 16 >>> h(8) Traceback (most recent call last): File "", line 1, in TypeError: 'NoneType' object is not callable The return value of the decorator is bound to the function name in the current scope,typically the current module for a normal function or the enclosing class for a method. Your decorator returns None (I'm ignoring the d={} funkiness for now). Therefore a side effect of using the decorator is that every function "foo" you use with this decorator defines the name "foo" in the current scope as None. As you can see in the example above, that makes the h() function not usable on its own. (And litters the namespace with a useless "h" name whose value is None.) Had my version of your decorator looked like this: def collect(f): d[f.__name__] = f return f then h() would have remained independently useful, at no cost to the functionality of your decorator. So I'm arguing that while you _can_ return None from a decorator (which is what is actually happening in your "not returning" phrasing), it remains _useful_ and _easy_ to return the decorated function itself unchanged. I've concerns about your d={} trick too, but we can discuss those in another subthread if you like. I'm hoping to convince you that your otherwise nifty @collect decorator could do with returning the function unchanged after doing its work. Finally, there is another important reason to return the function (or another callable): nesting decorators. Look at this piece of code from a project I'm working on: @classmethod @auto_session @require(lambda console: isinstance(console, Console)) @require(lambda top_node: isinstance(top_node, DirTreeNode)) @require(lambda top_node: not hasattr(top_node, 'can_uuid')) def from_fstree(cls, console, top_node, *, session): This is a method, but otherwise the situation is no different. Each of these decorators does a little task and returns a callable, ready for further decoration by outer decorators. So every one of them returns a suitable callable. If your @collect decorator returned the function, it too could be happily placed in such a nesting of decorators and everyone is happy. Because it does not, it does not play well with others, because an outer decorator would not have a callable to work with; it would get the None that your @collect returns. This is the other argument for always returning a callable: to interoperate with other decorators, or of course anything else which works with a callable. Cheers, Cameron Simpson From python at bdurham.com Fri Aug 2 19:47:07 2019 From: python at bdurham.com (Malcolm Greene) Date: Fri, 02 Aug 2019 17:47:07 -0600 Subject: [Tutor] Name for this type of class? Message-ID: They same naming is one of the two biggest challenges when it comes to software. Or one of three if you count the "off-by-one" joke :) Anyways, I'm looking for help coming up for the proper name for a class that collects the following type of telemetry data that we use for operational analysis. We use various combinations of these attributes depending on context. event_type event_step file_count line_count byte_count row_count batch_count job_count error_count warning_count duration Here are the ways we've come up with to describe a class that collects this info: JobMetrics JobStats or JobStatistics JobTelemetry None of these feel right and of course everyone on our team has a different opinion. Does this question ring any bells? Thank you, Malcolm From cs at cskk.id.au Fri Aug 2 20:37:50 2019 From: cs at cskk.id.au (Cameron Simpson) Date: Sat, 3 Aug 2019 10:37:50 +1000 Subject: [Tutor] Name for this type of class? In-Reply-To: References: Message-ID: <20190803003750.GA72476@cskk.homeip.net> On 02Aug2019 17:47, Malcolm Greene wrote: >They same naming is one of the two biggest challenges when it comes to software. Or one of three if you count the "off-by-one" joke :) > >Anyways, I'm looking for help coming up for the proper name for a class that collects the following type of telemetry data that we use for operational analysis. We use various combinations of these attributes depending on context. > >event_type >event_step >file_count >line_count >byte_count >row_count >batch_count >job_count >error_count >warning_count >duration > >Here are the ways we've come up with to describe a class that collects this info: > >JobMetrics >JobStats or JobStatistics >JobTelemetry > >None of these feel right and of course everyone on our team has a >different opinion. Well they could all subclass types.SimpleNamespace, and I personally think JobTelemetry or Telemetry sound fine given your description. Unless they're snapshots/samples, in which case "Telemetric" ?-) Cheers, Cameron Simpson From alan.gauld at yahoo.co.uk Fri Aug 2 20:38:24 2019 From: alan.gauld at yahoo.co.uk (Alan Gauld) Date: Sat, 3 Aug 2019 01:38:24 +0100 Subject: [Tutor] Name for this type of class? In-Reply-To: References: Message-ID: On 03/08/2019 00:47, Malcolm Greene wrote: > Anyways, I'm looking for help coming up for the proper name for a class that collects the following type of telemetry data Classes should never be named for their data but for their function. What does this class do? What operations does it support. Does the internal data support those operations? Or is it really several classes conflated into one for "convenience"? -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos From akleider at sonic.net Fri Aug 2 20:40:57 2019 From: akleider at sonic.net (Alex Kleider) Date: Fri, 02 Aug 2019 17:40:57 -0700 Subject: [Tutor] Name for this type of class? In-Reply-To: References: Message-ID: <37f289d6b3b81da9e85589d52a653ce4@sonic.net> On 2019-08-02 16:47, Malcolm Greene wrote: > They same naming is one of the two biggest challenges when it comes to > software. Or one of three if you count the "off-by-one" joke :) > > Anyways, I'm looking for help coming up for the proper name for a > class that collects the following type of telemetry data that we use > for operational analysis. We use various combinations of these > attributes depending on context. > > event_type > event_step > file_count > line_count > byte_count > row_count > batch_count > job_count > error_count > warning_count > duration > > Here are the ways we've come up with to describe a class that collects > this info: > > JobMetrics > JobStats or JobStatistics > JobTelemetry What about TelData for the class and job_data for an instance of the class? You might prefer TelemetryStatistics. It seems to me that the word 'job' would be more appropriate as (or part of) an instance name rather than the class name. Sounds like a question for "an English Major". (Any Garrison Keillor fans out there?) From python at bdurham.com Sat Aug 3 12:56:38 2019 From: python at bdurham.com (Malcolm Greene) Date: Sat, 03 Aug 2019 10:56:38 -0600 Subject: [Tutor] Name for this type of class? In-Reply-To: References: Message-ID: <7cf69dd1-135f-4f26-9f92-88571423d1bc@www.fastmail.com> Thanks for everyone's feedback. Some interesting thoughts including Alan's "classes should never be named for their data but for their function" feedback. I'm going to have to noodle on that one. Good stuff! Malcolm From mats at wichmann.us Sat Aug 3 13:16:51 2019 From: mats at wichmann.us (Mats Wichmann) Date: Sat, 3 Aug 2019 11:16:51 -0600 Subject: [Tutor] Name for this type of class? In-Reply-To: <7cf69dd1-135f-4f26-9f92-88571423d1bc@www.fastmail.com> References: <7cf69dd1-135f-4f26-9f92-88571423d1bc@www.fastmail.com> Message-ID: <24bd8040-793e-2a35-5072-166faf61ba79@wichmann.us> On 8/3/19 10:56 AM, Malcolm Greene wrote: > Thanks for everyone's feedback. Some interesting thoughts including Alan's "classes should never be named for their data but for their function" feedback. I'm going to have to noodle on that one. Good stuff! And more: if the class is really just a data container, then no need to make it a class. Use a namedtuple (or as Cameron suggested, types.SimpleNamespace). Of course we still don't know if that's the case... General comment on naming: you don't need to qualify things if the context makes it clear, all it does is make you type more stuff (or, I guess, exercise autocomplete in your IDE). A favorite one is to call your custom exception MyProgramSpecificException. Since this is going to appear in a line with raise or except in it, the word Exception is superfluous. This comes up in regards to an idea of using something like TelemetryData or TelemetryStatistics. It also comes up here: >> file_count >> line_count >> byte_count >> row_count >> batch_count >> job_count >> error_count >> warning_count why not "files", "lines", "bytes"... the plural form already tells you it's a counter. Opinions, we all have 'em :) From akleider at sonic.net Sat Aug 3 13:40:49 2019 From: akleider at sonic.net (Alex Kleider) Date: Sat, 03 Aug 2019 10:40:49 -0700 Subject: [Tutor] Name for this type of class? In-Reply-To: <24bd8040-793e-2a35-5072-166faf61ba79@wichmann.us> References: <7cf69dd1-135f-4f26-9f92-88571423d1bc@www.fastmail.com> <24bd8040-793e-2a35-5072-166faf61ba79@wichmann.us> Message-ID: On 2019-08-03 10:16, Mats Wichmann wrote: > ..... It also comes up here: > >>> file_count >>> line_count >>> byte_count >>> row_count >>> batch_count >>> job_count >>> error_count >>> warning_count > > why not "files", "lines", "bytes"... the plural form already tells you > it's a counter. To me "files", "lines", "bytes" implies collections of files, lines bytes. (i.e. arrays or tuples...) "___count" implies an integer. If the latter, I'd use "n_files", "n_lines" ... (possibly without the underscores if you find typing them a bother.) Comments? From Richard at Damon-Family.org Sat Aug 3 13:57:07 2019 From: Richard at Damon-Family.org (Richard Damon) Date: Sat, 3 Aug 2019 13:57:07 -0400 Subject: [Tutor] Name for this type of class? In-Reply-To: References: <7cf69dd1-135f-4f26-9f92-88571423d1bc@www.fastmail.com> <24bd8040-793e-2a35-5072-166faf61ba79@wichmann.us> Message-ID: On 8/3/19 1:40 PM, Alex Kleider wrote: > On 2019-08-03 10:16, Mats Wichmann wrote: > >> .....? It also comes up here: >> >>>> file_count >>>> line_count >>>> byte_count >>>> row_count >>>> batch_count >>>> job_count >>>> error_count >>>> warning_count >> >> why not "files", "lines", "bytes"... the plural form already tells you >> it's a counter. > > To me "files", "lines", "bytes" implies collections of files, lines > bytes. (i.e. arrays or tuples...) > "___count" implies an integer. > If the latter, I'd use "n_files", "n_lines" ... (possibly without the > underscores if you find typing them a bother.) > Comments? I agree, plural nouns imply collections, and collections should generally be plural nouns. file_count is fine to me, or it could be numfiles or nfiles (possibly adding the underscore) -- Richard Damon From alan.gauld at yahoo.co.uk Sat Aug 3 17:48:10 2019 From: alan.gauld at yahoo.co.uk (Alan Gauld) Date: Sat, 3 Aug 2019 22:48:10 +0100 Subject: [Tutor] Name for this type of class? In-Reply-To: <7cf69dd1-135f-4f26-9f92-88571423d1bc@www.fastmail.com> References: <7cf69dd1-135f-4f26-9f92-88571423d1bc@www.fastmail.com> Message-ID: On 03/08/2019 17:56, Malcolm Greene wrote: >... interesting thoughts including Alan's "classes should never be named > for their data but for their function" feedback. I'm going to have to > noodle on that one. Let me expand slightly. Go back to the fundamentals of OOP. OOP is about programs composed of objects that communicate by sending each other messages. Those messages result in the objects executing a method. Objects, therefore are defined by the set of messages that can be sent to them. By their behaviour in other words. The data they contain should only be there to support the behaviour. So an object should expose a set of methods that determine what it can do. It therefore stands to reason that the class (the template for the objects) should have a name that reflects the nature of the messages that can be sent. What kind of thing offers those kinds of capabilities? Once you can describe the operations that the object can perform you can usually find a name that describes the kind of object. One of the anti-patterns of OOP is having classes that expose methods that are unrelated to each other. Then we just have a bunch of data and some functions collected together but no coherent concept. It could be two(or more) genuine classes accidentally merged into one. Or it could be a plain module masquerading as a class. Another clue is where you only ever need a single instance of this "class". That's often a sign that it should just be a module. (There are a very few genuine singleton use cases though, so it's not a cast iron rule.) HTH. -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos From PyTutor at DancesWithMice.info Sat Aug 3 23:44:48 2019 From: PyTutor at DancesWithMice.info (David L Neil) Date: Sun, 4 Aug 2019 15:44:48 +1200 Subject: [Tutor] Name for this type of class? In-Reply-To: References: Message-ID: NB am heading somewhat OT NBB Python3+ On 3/08/19 12:38 PM, Alan Gauld via Tutor wrote: > On 03/08/2019 00:47, Malcolm Greene wrote: >> Anyways, I'm looking for help coming up for the proper name for a class that collects the following type of telemetry data > > Classes should never be named for their data but for their function. > What does this class do? What operations does it support. This statement caused me to double-take. Do I misunderstand? Quick survey of my PC's Projects directory:- sure-enough, few of my classNMs are verbs and convey little/no idea of function. (to a degree one's expectations/experience lead to ideas of (what might be) included in its functionality) They are almost exclusively nouns, eg Customer, Person, Organisation; rather than verbs/functions, eg Selling, Addressing, Billing. [I'm not an OOP-native, and embraced OOP concepts as extensions to practices learned whilst programming with languages such as COBOL!] Part of my introduction to OOP included the word "entity". A class was to represent an entity. An entity would be described (have attributes), just like a data-record; and it would have associated actions (methods or procedures) which acted on the entity's attributes. An entity was described as a 'thing' - no mention of an entity being an action, even though 'things' do 'stuff'. Python is not particularly dogmatic or "pure" in its following of the OOP paradigm. Unlike some languages it does not insist on OOP and will support elements of both "procedural" and "functional" programming. For this discussion then, a Wikipedia definition* 'will do'. What is included in OOP? [sometimes have 'translated' into Python terminology] - objects - data attributes - methods - inheritance - instances and dynamic dispatch - encapsulation [dotted notation] - composition [will come back to this...] - inheritance/delegation [ditto] - polymorphism [sub-classing] NB the article was no help with regard to the naming of objects/classes. Simple comprehensions of inheritance and composition boil down to the phrases "is a" and "has a". The subjects and objects of such sentences will surely be a noun, rather than a verb? Employee is a Person Circle/Oval/Square/Triangle/Shape has a CentralPoint Thus: class Person(): ... class Employee( Person ): ... Python says "everything is an object" and makes little/no distinction between "type" and "class": >>> class C: pass ... >>> i = C() >>> type( i ) >>> i.__class__ >>> type( C ) >>> C.__class__ So, what are Python's base types/objects/classes? eg int, str, list. Are these "data or function"? Expand that outwards into the PSL. Same: numbers, decimals, fractions. However, does "math" convey more "function" than "data"? There's current discussion about concerns of the age/relevance/maintenance of certain members within the PSL. So, let's look at a recent addition (it even features O-O in its description): "pathlib ? Object-oriented filesystem paths". Function or data? Let's argue that it is a library not a class/object per-se. Fine. However, the six (major) classes that library contains, eg Path, PosixPath, are all nouns! At first I thought Inspect might be different, but (it is billed as a module of functions cf classes!) the classNMs are nouns (one is even called "Attribute"). The functions though, are indeed verbs, eg getargs(). Whither "Classes should never be named for their data but for their function."? WebRef: https://en.wikipedia.org/wiki/Object-oriented_programming -- Regards =dn From alan.gauld at yahoo.co.uk Sun Aug 4 04:15:30 2019 From: alan.gauld at yahoo.co.uk (Alan Gauld) Date: Sun, 4 Aug 2019 09:15:30 +0100 Subject: [Tutor] Name for this type of class? In-Reply-To: References: Message-ID: On 04/08/2019 04:44, David L Neil wrote: >> Classes should never be named for their data but for their function. >> What does this class do? What operations does it support. > > > This statement caused me to double-take. Do I misunderstand? I suspect so, thats why I wrote my follow up. I was not suggesting that a class name should be a verb, not at all. Objects are things so class names should be nouns. Method names should usually be verbs although that's not always the case. > They are almost exclusively nouns, eg Customer, Person, Organisation; > rather than verbs/functions, eg Selling, Addressing, Billing. Correct and as it should be. But what those nouns do is tell you about the high level abstraction that the class implements. They do not tell you explicitly about the data inside the class. A Person is not a "NameManager" for example. > [I'm not an OOP-native, and embraced OOP concepts as extensions to > practices learned whilst programming with languages such as COBOL!] Relatively few people are OOP natives, nearly everyone comes at it with a previous experiece of procedural programming. That's down to how we teach programming. > Part of my introduction to OOP included the word "entity". A class was > to represent an entity. An entity would be described (have attributes), > just like a data-record; and it would have associated actions (methods > or procedures) which acted on the entity's attributes. An entity was > described as a 'thing' - no mention of an entity being an action, even > though 'things' do 'stuff'. It is not an action, but it has actions. And the only way to interact with that entity is through its actions. Therefore the entity is defined to the outside world by its actions. One highly unfortunate side effect of using the term entity when talking to traditional programmers is that they associate it with entity relationship diagrams where entities are effectively data tables. It sub-consciously causes people to start thinking of objects as collections of data rather than as collections of operations. > For this discussion then, a Wikipedia definition* 'will do'. What is > included in OOP? [sometimes have 'translated' into Python terminology] > > - objects > - data attributes > - methods > - inheritance > - instances and dynamic dispatch > - encapsulation [dotted notation] > - composition [will come back to this...] > - inheritance/delegation [ditto] > - polymorphism [sub-classing] Very little in that list has to do with OOP. Most of it is implementation details of how OOP languages work. I would narrow that list down to: objects abstraction polymorphism All the rest are implementation features. > Simple comprehensions of inheritance and composition boil down to the > phrases "is a" and "has a". The subjects and objects of such sentences > will surely be a noun, rather than a verb? Absolutely, I was not suggesting verbs as class names. My bad for not making that clearer first time around. > Employee is a Person Yes > Circle/Oval/Square/Triangle/Shape has a CentralPoint Not necessarily. Or at least, yes they do but that may or may not be significant in terms of their definition in an OOP system. What is significant is that Shape is an abstraction of all the others. So the definition of the methods of all shapes sits in the shape class and the others specialise those methods to reflect their individual behaviours. > class Person(): ... > > class Employee( Person ): ... > > Python says "everything is an object" and makes little/no distinction > between "type" and "class": True, everything is an object but not everything has a class. At least not explicitly. But everything has a type. But the distinction between types and classes is a subtlety that most programmers need not worry about. > So, what are Python's base types/objects/classes? eg int, str, list. Are > these "data or function"? Neither and both. But they are named for what we do to them. integers have an expected set of operations that we can perform. add, subtract, multiply etc. > "pathlib ? Object-oriented filesystem paths". Function or data? > > Let's argue that it is a library not a class/object per-se. Fine. > However, the six (major) classes that library contains, eg Path, > PosixPath, are all nouns! Yes but they are objects that expose methods. They are things that you can actively use, not just storage boxes. > At first I thought Inspect might be different, but (it is billed as a > module of functions cf classes!) the classNMs are nouns (one is even > called "Attribute"). The functions though, are indeed verbs, eg getargs(). Ad that is how it should be. > Whither "Classes should never be named for their data but for their > function."? It's a very old OOP meme going back to the days of Smalltalk, Lisp, Object Pascal and Objective C (ie the late 80's). It does not mean the class names are verbs rather that the names reflect what you will use the object for in the context of the system under design, not what its internal data is. (A related guideline is that classes should not be called "xxxManager" - objects should manage themselves.) The purpose of these guides is to focus people's minds on objects(active entities) rather than data because focusing on data rather than behaviours is one of the most common errors by OOP newbies. It tends to result in programs that are procedural code disguised inside classes. And that usually results in the worst of both worlds. -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos From alan.gauld at yahoo.co.uk Sun Aug 4 09:46:26 2019 From: alan.gauld at yahoo.co.uk (Alan Gauld) Date: Sun, 4 Aug 2019 14:46:26 +0100 Subject: [Tutor] Name for this type of class? In-Reply-To: References: Message-ID: On 04/08/2019 09:15, Alan Gauld via Tutor wrote: >>> Classes should never be named for their data but for their function. > I was not suggesting that a class name should be a verb, I think my biggest mistake here was the use of the word "function" which, in a programming community, has a very specific meaning whereas I was thinking of the natural English meaning. It might have been better if I'd said classes should be named for their *purpose* or their *role*. And, in fact, that's true of any variable in any language, it should express intent not internal structure. Apologies for any resulting confusion. -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos From ben+python at benfinney.id.au Mon Aug 5 07:56:08 2019 From: ben+python at benfinney.id.au (Ben Finney) Date: Mon, 05 Aug 2019 21:56:08 +1000 Subject: [Tutor] Inserting long URL's into comments & docstrings? References: Message-ID: <86d0hjrfl3.fsf@benfinney.id.au> James Hartley writes: > This should be a slow ball pitch. Unfortunately, I haven't stumbled > across a reasonable answer yet. You can find the answer directly in PEP 8. > On occasion, I put long URL's into comments/docstrings simply to document > where I found specific information. That's good practice, thank you for doing it! > However, to be a good disciple of PEP8, anything which can't fit > within 72 characters needs to be split across multiple lines. To be a good disciple of PEP 8, follow it to completion. That includes the section directly after the introduction . If a tool is rigidly enforcing some rules of PEP 8, but failing to let you follow that section? That tool is foolish and needs to be ignored. Follow PEP 8, and use your judgement. -- \ ?An expert is a man who has made all the mistakes which can be | `\ made in a very narrow field.? ?Niels Bohr | _o__) | Ben Finney From mhysnm1964 at gmail.com Mon Aug 5 06:14:10 2019 From: mhysnm1964 at gmail.com (mhysnm1964 at gmail.com) Date: Mon, 5 Aug 2019 20:14:10 +1000 Subject: [Tutor] Flask and flask_wtf issue -- I hpe someone can help. Message-ID: <006001d54b76$87ecb9c0$97c62d40$@gmail.com> All, Thanks to the starting point from Allan's chapter on web ffframeworks. I have now build quite a nice little app showing a bunch of records from a sqlite database in tables. The issue I am having is with flask_wtf and forms. I have a Selector HTML which I want to grab the selected item from the list of options. I cannot get the data from the selector. If there is five items and I select the 2nd option. I want the value related to option 2 to be retrieved and updating a database. Below is the information I hope will make things clear. HTML template: {% extends "base.html" %} {% block content %}

New Sub Category

{{ form.hidden_tag() }} {{ form.categoriesfield.label }} {{ form.categoriesfield(rows=10) }}

{{ form.subcategoryfield.label }}
{{ form.subcategoryfield(size=64) }}
{% for error in form.subcategoryfield.errors %} [{{ error }}] {% endfor %}

{{ form.submit() }}

List of sub Categories

{% if prev_url %} Newer Records {% endif %} {% if next_url %} Next Records {% endif %} {% for row in records %} {% endfor %}
Records
ID Sub Category Name Category Name
{{row.id }} {{row.subcategory }} {{row.categories.category }}
{% if prev_url %} Newer Records {% endif %} {% if next_url %} Next Records {% endif %}
{% endblock %} Now for the form.py class related to this form: from flask_wtf import FlaskForm from wtforms import StringField, BooleanField, SubmitField, TextAreaField, TextField, IntegerField, RadioField, SelectField, SelectMultipleField from wtforms.validators import ValidationError, DataRequired, EqualTo, Length from app.models import * # all table model classes class SubCategoryForm (FlaskForm): categoriesfield = SelectField('Categories', choices= [(c.id, c.category) for c in Categories.query.order_by('category')]) subcategoryfield = StringField('Sub Category Name') submit = SubmitField('Create SubCategory') Now for the routes.py function which the issue occurs. As you can tell below, I am passing the category id and category text value to the SelectField field to create the HTML code. The text value is being displayed and I want the ID to be retrieved. Then I am planning to update the SubCategory table with the category id to establish the relationship for a new sub_category. from datetime import datetime from flask import render_template, flash, redirect, url_for, request from app import app, db from app.forms import CategoryForm, SubCategoryForm from app.models import * # all table model classes @app.route('/subcategories', methods=['GET', 'POST']) def subcategories (): tables = Accounts.query.all() form = SubCategoryForm() print (form.categoriesfield.data) if form.validate_on_submit(): subcategory_value = SubCategories(subcategory=form.subcategory.data) db.session.add(subcategory_value) db.session.commit() flash('Congratulations, a sub category was added. {} {}'.format(subcategory_value, form.categoriesfield.data)) return redirect(url_for('subcategories')) page = request.args.get('page', 1, type=int) records = SubCategories.query.order_by(SubCategories.id).paginate(page, app.config['POSTS_PER_PAGE'], False) next_url = url_for('subcategories', page=records.next_num) if records.has_next else None prev_url = url_for('subcategories', page=records.prev_num) if records.has_prev else None return render_template('subcategories.html', tables = tables, title='Manage sub Categories', form=form, records = records.items, next_url = next_url, prev_url = prev_url) I cannot work how to get the category ID. If I use validate or not on any fields, it doesn't produce anything in the flash. The page refreshes and leave the content in the field. The database isn't being updated with the new sub_category. All the database relationships are working when I manually insert the data into the table via SQLIte3. Any thoughts? Have I made myself clear enough? Sean From steve10brink at comcast.net Tue Aug 6 12:44:30 2019 From: steve10brink at comcast.net (Stephen Tenbrink) Date: Tue, 06 Aug 2019 10:44:30 -0600 Subject: [Tutor] (no subject) Message-ID: From roel at roelschroeven.net Tue Aug 6 14:30:09 2019 From: roel at roelschroeven.net (Roel Schroeven) Date: Tue, 6 Aug 2019 20:30:09 +0200 Subject: [Tutor] Name for this type of class? In-Reply-To: <24bd8040-793e-2a35-5072-166faf61ba79@wichmann.us> References: <7cf69dd1-135f-4f26-9f92-88571423d1bc@www.fastmail.com> <24bd8040-793e-2a35-5072-166faf61ba79@wichmann.us> Message-ID: Mats Wichmann schreef op 3/08/2019 om 19:16: >>> file_count >>> line_count >>> byte_count >>> ... > > why not "files", "lines", "bytes"... the plural form already tells you > it's a counter. > Opinions, we all have 'em :) We do, and in this case I strongly disagree with yours :) To me a plural indicates a collection of items, not a number of items. It may seem a small detail, but when I see "files" in a codebase to indicate a count, instead of "file_count" or "nr_files" or "num_files", it always takes me a moment of reflection to graps the meaning. Every time again. If you use plural to indicate counts, what do you use for collections of items? -- "Honest criticism is hard to take, particularly from a relative, a friend, an acquaintance, or a stranger." -- Franklin P. Jones Roel Schroeven From richard.rizk.35 at gmail.com Wed Aug 7 13:08:12 2019 From: richard.rizk.35 at gmail.com (Richard Rizk) Date: Wed, 7 Aug 2019 13:08:12 -0400 Subject: [Tutor] Error terminal Message-ID: <0E38C790-78B9-43A7-93A2-6CFE6064217C@gmail.com> Hello I wanted to send you this email to ask if you would have someone that can solve the problem I'm having with python. I'm having issues with terminal on mac, is there someone that can help with this? Best regards, Richard From cs at cskk.id.au Wed Aug 7 18:09:30 2019 From: cs at cskk.id.au (Cameron Simpson) Date: Thu, 8 Aug 2019 08:09:30 +1000 Subject: [Tutor] Error terminal In-Reply-To: <0E38C790-78B9-43A7-93A2-6CFE6064217C@gmail.com> References: <0E38C790-78B9-43A7-93A2-6CFE6064217C@gmail.com> Message-ID: <20190807220930.GA59371@cskk.homeip.net> On 07Aug2019 13:08, Richard Rizk wrote: >I wanted to send you this email to ask if you would have someone that >can solve the problem I'm having with python. > >I'm having issues with terminal on mac, is there someone that can help >with this? I probably can. Is this a Python problem, a Terminal problem, or some kind of mix? Anyway, followup and describe your issue and we'll see. Remember that this list drops attachments, so all your description should be text in the message, including and cut/paste of terminal output (which we usually want for context, and it is more precise than loose verbal descriptions alone). Cheers, Cameron Simpson From mhysnm1964 at gmail.com Wed Aug 7 19:24:48 2019 From: mhysnm1964 at gmail.com (mhysnm1964 at gmail.com) Date: Thu, 8 Aug 2019 09:24:48 +1000 Subject: [Tutor] flask_sqlalchemy query in relation to SQL relationships. Message-ID: <01f701d54d77$4f5cdab0$ee169010$@gmail.com> All, Python 3.6 under windows 10 - I am using flask_sqlalchemy and finding it quite good with taking a lot of the heavy lifting of writing SQL statements. I have a question in relation to SQL relationships and how would this be done using SQL or flask_sqlalchemy or sqlalchemy. I have three tables which are related to each other. Table 1 has many records related to table 2. Table 2 has many relationships to table 3. Below is the model used by flask_sqlalchemy to make things clearer: class Categories(db.Model): # one to many relationships to SubCategories id = db.Column(db.Integer, primary_key=True) category = db.Column(db.String(64), index=True, unique=True) subcategories = db.relationship('SubCategories', backref='categories', lazy='dynamic') def __repr__(self): return ''.format(self.category) class SubCategories(db.Model): # Many to one relationship to Categories. # One to many relationship with Transactions. id = db.Column(db.Integer, primary_key=True) subcategory = db.Column(db.String(80), index=True, unique=True) category_id = db.Column(db.Integer, db.ForeignKey('categories.id')) transactions = db.relationship('Transactions', backref='sub_categories', lazy='dynamic') class Transactions (db.Model): # Many to one relationship to Sub_categories # Many to one relationships with Accounts. id = db.Column(db.Integer, primary_key=True) transactiondate = db.Column(db.Date, index=True, nullable=False) description = db.Column(db.String(80), nullable=False) amount = db.Column(db.Float, nullable=False) subcategory_id = db.Column(db.Integer, db.ForeignKey('sub_categories.id')) account_no = db.Column(db.Integer, db.ForeignKey('accounts.account_number')) Thus, when I have a query from the view: records = Transactions.query.order_by(Transactions.subcategory_id, Transactions.transactiondate.desc()) page = request.args.get('page', 1, type=int) records = records.paginate(page, app.config['POSTS_PER_PAGE'], False) next_url = url_for('index', page=records.next_num) if records.has_next else None prev_url = url_for('index', page=records.prev_num) if records.has_prev else None return render_template('index.html', title='Budget Program Main Page', records = records.items, tables = tables, account = 'all Transactions', prev_url = prev_url, next_url = next_url, form = form, sort_form = sort_form) Template HTML code which displays the category and sub_category text values based upon the above query. {% for row in records %} {{row.accounts.account_name}} {{row.account_no}} {{row.transactiondate}} {{row.description}} {{row.amount}} {{row.sub_categories.categories.category}} {{row.sub_categories.subcategory }} {% endfor %} What I cannot do, is use sub_categories.categories.category or sub_categories.subcategory in the query statements to sort the transaction table by category or sub_category . For example the following does not work sort_by = Transactions.sub_categories.categories.category records = Transactions.query.order_by(sort_by.desc()) sqlalchemy complains that it cannot find the object .categories. Thus I do not know how to sort on the category table which is a child of sub_categories which is a child of transactions. How would this be done in SQL? I hope this is the right place for this question. Sean From richard.rizk.35 at gmail.com Wed Aug 7 19:27:12 2019 From: richard.rizk.35 at gmail.com (Richard Rizk) Date: Wed, 7 Aug 2019 19:27:12 -0400 Subject: [Tutor] Error terminal In-Reply-To: <20190807220930.GA59371@cskk.homeip.net> References: <0E38C790-78B9-43A7-93A2-6CFE6064217C@gmail.com> <20190807220930.GA59371@cskk.homeip.net> Message-ID: Thank you Cameron for your message. Please find below the error message i am receiving. I think the command line i'm running is trying to connect with the python3.7 that i have on my computer which is a requirement for the command line to work but it keeps connecting to the default python2.7 that is on Macbook. I'd love to jump on a 15min call if it's possible for you. Best regards, Richard Error: ------------- DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support Requirement already satisfied: Flask==0.10.1 in /Library/Python/2.7/site-packages (from -r requirements.txt (line 1)) (0.10.1) Requirement already satisfied: Flask-Admin==1.3.0 in /Library/Python/2.7/site-packages (from -r requirements.txt (line 2)) (1.3.0) Requirement already satisfied: Flask-Bcrypt==0.7.1 in /Library/Python/2.7/site-packages (from -r requirements.txt (line 3)) (0.7.1) Requirement already satisfied: Flask-DebugToolbar==0.10.0 in /Library/Python/2.7/site-packages (from -r requirements.txt (line 4)) (0.10.0) Requirement already satisfied: Flask-Login==0.3.2 in /Library/Python/2.7/site-packages (from -r requirements.txt (line 5)) (0.3.2) Requirement already satisfied: Flask-Mail==0.9.1 in /Library/Python/2.7/site-packages (from -r requirements.txt (line 6)) (0.9.1) Requirement already satisfied: Flask-Script==2.0.5 in /Library/Python/2.7/site-packages (from -r requirements.txt (line 7)) (2.0.5) Requirement already satisfied: Flask-SQLAlchemy==2.1 in /Library/Python/2.7/site-packages (from -r requirements.txt (line 8)) (2.1) Requirement already satisfied: Flask-WTF==0.12 in /Library/Python/2.7/site-packages (from -r requirements.txt (line 9)) (0.12) Requirement already satisfied: gunicorn==19.4.5 in /Library/Python/2.7/site-packages (from -r requirements.txt (line 10)) (19.4.5) Requirement already satisfied: itsdangerous==0.24 in /Library/Python/2.7/site-packages (from -r requirements.txt (line 11)) (0.24) Collecting pytz==2016.10 (from -r requirements.txt (line 12)) Using cached https://files.pythonhosted.org/packages/f5/fa/4a9aefc206aa49a4b5e0a72f013df1f471b4714cdbe6d78f0134feeeecdb/pytz-2016.10-py2.py3-none-any.whl Collecting structlog==16.1.0 (from -r requirements.txt (line 13)) Using cached https://files.pythonhosted.org/packages/c5/bf/f87b8273e5016618d750e79a2dae7f42b0a6310bc1f4368dcb217b426e8e/structlog-16.1.0-py2.py3-none-any.whl Collecting termcolor==1.1.0 (from -r requirements.txt (line 14)) Using cached https://files.pythonhosted.org/packages/8a/48/a76be51647d0eb9f10e2a4511bf3ffb8cc1e6b14e9e4fab46173aa79f981/termcolor-1.1.0.tar.gz Requirement already satisfied: WTForms==2.1 in /Library/Python/2.7/site-packages (from -r requirements.txt (line 15)) (2.1) Collecting stripe==2.21.0 (from -r requirements.txt (line 16)) Using cached https://files.pythonhosted.org/packages/00/6a/39aca3e6726c5f62f5a391c37441613019d5c127c0ab483c6ea443ae0560/stripe-2.21.0-py2.py3-none-any.whl Requirement already satisfied: Werkzeug>=0.7 in /Library/Python/2.7/site-packages (from Flask==0.10.1->-r requirements.txt (line 1)) (0.15.5) Requirement already satisfied: Jinja2>=2.4 in /Library/Python/2.7/site-packages (from Flask==0.10.1->-r requirements.txt (line 1)) (2.10.1) Requirement already satisfied: bcrypt in /Library/Python/2.7/site-packages (from Flask-Bcrypt==0.7.1->-r requirements.txt (line 3)) (3.1.7) Requirement already satisfied: Blinker in /Library/Python/2.7/site-packages (from Flask-DebugToolbar==0.10.0->-r requirements.txt (line 4)) (1.4) Requirement already satisfied: SQLAlchemy>=0.7 in /Library/Python/2.7/site-packages (from Flask-SQLAlchemy==2.1->-r requirements.txt (line 8)) (1.3.6) Requirement already satisfied: six in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from structlog==16.1.0->-r requirements.txt (line 13)) (1.4.1) Collecting requests[security]>=2.20; python_version < "3.0" (from stripe==2.21.0->-r requirements.txt (line 16)) Using cached https://files.pythonhosted.org/packages/51/bd/23c926cd341ea6b7dd0b2a00aba99ae0f828be89d72b2190f27c11d4b7fb/requests-2.22.0-py2.py3-none-any.whl Requirement already satisfied: MarkupSafe>=0.23 in /Library/Python/2.7/site-packages (from Jinja2>=2.4->Flask==0.10.1->-r requirements.txt (line 1)) (1.1.1) Requirement already satisfied: cffi>=1.1 in /Library/Python/2.7/site-packages (from bcrypt->Flask-Bcrypt==0.7.1->-r requirements.txt (line 3)) (1.12.3) Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 (from requests[security]>=2.20; python_version < "3.0"->stripe==2.21.0->-r requirements.txt (line 16)) Using cached https://files.pythonhosted.org/packages/e6/60/247f23a7121ae632d62811ba7f273d0e58972d75e58a94d329d51550a47d/urllib3-1.25.3-py2.py3-none-any.whl Collecting certifi>=2017.4.17 (from requests[security]>=2.20; python_version < "3.0"->stripe==2.21.0->-r requirements.txt (line 16)) Using cached https://files.pythonhosted.org/packages/69/1b/b853c7a9d4f6a6d00749e94eb6f3a041e342a885b87340b79c1ef73e3a78/certifi-2019.6.16-py2.py3-none-any.whl Collecting chardet<3.1.0,>=3.0.2 (from requests[security]>=2.20; python_version < "3.0"->stripe==2.21.0->-r requirements.txt (line 16)) Using cached https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl Collecting idna<2.9,>=2.5 (from requests[security]>=2.20; python_version < "3.0"->stripe==2.21.0->-r requirements.txt (line 16)) Using cached https://files.pythonhosted.org/packages/14/2c/cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/idna-2.8-py2.py3-none-any.whl Collecting cryptography>=1.3.4; extra == "security" (from requests[security]>=2.20; python_version < "3.0"->stripe==2.21.0->-r requirements.txt (line 16)) Using cached https://files.pythonhosted.org/packages/e2/bf/3b641820c561aedde134e88528ba68dffe41ed238899fab7f7ef20118aaf/cryptography-2.7-cp27-cp27m-macosx_10_6_intel.whl Collecting pyOpenSSL>=0.14; extra == "security" (from requests[security]>=2.20; python_version < "3.0"->stripe==2.21.0->-r requirements.txt (line 16)) Using cached https://files.pythonhosted.org/packages/01/c8/ceb170d81bd3941cbeb9940fc6cc2ef2ca4288d0ca8929ea4db5905d904d/pyOpenSSL-19.0.0-py2.py3-none-any.whl Requirement already satisfied: pycparser in /Library/Python/2.7/site-packages (from cffi>=1.1->bcrypt->Flask-Bcrypt==0.7.1->-r requirements.txt (line 3)) (2.19) Collecting enum34; python_version < "3" (from cryptography>=1.3.4; extra == "security"->requests[security]>=2.20; python_version < "3.0"->stripe==2.21.0->-r requirements.txt (line 16)) Using cached https://files.pythonhosted.org/packages/c5/db/e56e6b4bbac7c4a06de1c50de6fe1ef3810018ae11732a50f15f62c7d050/enum34-1.1.6-py2-none-any.whl Collecting asn1crypto>=0.21.0 (from cryptography>=1.3.4; extra == "security"->requests[security]>=2.20; python_version < "3.0"->stripe==2.21.0->-r requirements.txt (line 16)) Using cached https://files.pythonhosted.org/packages/ea/cd/35485615f45f30a510576f1a56d1e0a7ad7bd8ab5ed7cdc600ef7cd06222/asn1crypto-0.24.0-py2.py3-none-any.whl Collecting ipaddress; python_version < "3" (from cryptography>=1.3.4; extra == "security"->requests[security]>=2.20; python_version < "3.0"->stripe==2.21.0->-r requirements.txt (line 16)) Using cached https://files.pythonhosted.org/packages/fc/d0/7fc3a811e011d4b388be48a0e381db8d990042df54aa4ef4599a31d39853/ipaddress-1.0.22-py2.py3-none-any.whl ERROR: pyopenssl 19.0.0 has requirement six>=1.5.2, but you'll have six 1.4.1 which is incompatible. Installing collected packages: pytz, structlog, termcolor, urllib3, certifi, chardet, idna, enum34, asn1crypto, ipaddress, cryptography, pyOpenSSL, requests, stripe Found existing installation: pytz 2013.7 Uninstalling pytz-2013.7: ERROR: Could not install packages due to an EnvironmentError: [('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Indian/Mauritius', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Indian/Mauritius', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Indian/Mauritius'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Indian/Chagos', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Indian/Chagos', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Indian/Chagos'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Indian/Mayotte', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Indian/Mayotte', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Indian/Mayotte'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Indian/Christmas', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Indian/Christmas', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Indian/Christmas'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Indian/Cocos', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Indian/Cocos', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Indian/Cocos'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Indian/Maldives', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Indian/Maldives', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Indian/Maldives'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Indian/Comoro', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Indian/Comoro', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Indian/Comoro'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Indian/Reunion', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Indian/Reunion', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Indian/Reunion'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Indian/Mahe', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Indian/Mahe', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Indian/Mahe'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Indian/Kerguelen', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Indian/Kerguelen', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Indian/Kerguelen'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Indian/Antananarivo', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Indian/Antananarivo', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Indian/Antananarivo'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Indian', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Indian', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Indian'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Atlantic/Faroe', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Atlantic/Faroe', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Atlantic/Faroe'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Atlantic/Canary', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Atlantic/Canary', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Atlantic/Canary'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Atlantic/Stanley', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Atlantic/Stanley', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Atlantic/Stanley'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Atlantic/Bermuda', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Atlantic/Bermuda', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Atlantic/Bermuda'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Atlantic/South_Georgia', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Atlantic/South_Georgia', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Atlantic/South_Georgia'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Atlantic/St_Helena', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Atlantic/St_Helena', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Atlantic/St_Helena'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Atlantic/Jan_Mayen', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Atlantic/Jan_Mayen', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Atlantic/Jan_Mayen'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Atlantic/Faeroe', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Atlantic/Faeroe', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Atlantic/Faeroe'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Atlantic/Reykjavik', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Atlantic/Reykjavik', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Atlantic/Reykjavik'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Atlantic/Cape_Verde', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Atlantic/Cape_Verde', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Atlantic/Cape_Verde'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Atlantic/Azores', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Atlantic/Azores', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Atlantic/Azores'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Atlantic/Madeira', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Atlantic/Madeira', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Atlantic/Madeira'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Atlantic', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Atlantic', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Atlantic'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/CST6CDT', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/CST6CDT', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/CST6CDT'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Poland', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Poland', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Poland'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Mideast/Riyadh88', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Mideast/Riyadh88', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Mideast/Riyadh88'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Mideast/Riyadh89', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Mideast/Riyadh89', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Mideast/Riyadh89'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Mideast/Riyadh87', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Mideast/Riyadh87', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Mideast/Riyadh87'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Mideast', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Mideast', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Mideast'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/US/Alaska', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/US/Alaska', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/US/Alaska'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/US/Pacific', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/US/Pacific', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/US/Pacific'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/US/Eastern', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/US/Eastern', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/US/Eastern'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/US/Michigan', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/US/Michigan', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/US/Michigan'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/US/Arizona', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/US/Arizona', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/US/Arizona'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/US/Indiana-Starke', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/US/Indiana-Starke', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/US/Indiana-Starke'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/US/Aleutian', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/US/Aleutian', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/US/Aleutian'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/US/Pacific-New', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/US/Pacific-New', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/US/Pacific-New'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/US/Hawaii', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/US/Hawaii', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/US/Hawaii'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/US/East-Indiana', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/US/East-Indiana', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/US/East-Indiana'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/US/Central', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/US/Central', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/US/Central'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/US/Mountain', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/US/Mountain', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/US/Mountain'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/US/Samoa', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/US/Samoa', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/US/Samoa'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/US', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/US', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/US'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Kwajalein', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Kwajalein', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Kwajalein'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Brazil/DeNoronha', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Brazil/DeNoronha', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Brazil/DeNoronha'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Brazil/Acre', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Brazil/Acre', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Brazil/Acre'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Brazil/East', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Brazil/East', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Brazil/East'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Brazil/West', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Brazil/West', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Brazil/West'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Brazil', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Brazil', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Brazil'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Port_Moresby', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Port_Moresby', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Port_Moresby'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Chuuk', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Chuuk', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Chuuk'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Easter', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Easter', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Easter'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Kwajalein', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Kwajalein', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Kwajalein'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Tongatapu', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Tongatapu', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Tongatapu'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Yap', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Yap', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Yap'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Wallis', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Wallis', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Wallis'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Apia', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Apia', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Apia'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Norfolk', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Norfolk', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Norfolk'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Efate', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Efate', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Efate'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Fiji', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Fiji', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Fiji'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Funafuti', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Funafuti', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Funafuti'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Palau', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Palau', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Palau'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Guam', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Guam', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Guam'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Saipan', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Saipan', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Saipan'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Kosrae', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Kosrae', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Kosrae'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Niue', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Niue', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Niue'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Ponape', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Ponape', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Ponape'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Wake', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Wake', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Wake'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Galapagos', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Galapagos', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Galapagos'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Johnston', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Johnston', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Johnston'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Midway', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Midway', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Midway'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Nauru', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Nauru', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Nauru'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Guadalcanal', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Guadalcanal', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Guadalcanal'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Chatham', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Chatham', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Chatham'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Auckland', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Auckland', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Auckland'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Noumea', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Noumea', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Noumea'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Fakaofo', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Fakaofo', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Fakaofo'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Tahiti', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Tahiti', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Tahiti'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Gambier', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Gambier', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Gambier'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Majuro', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Majuro', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Majuro'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Honolulu', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Honolulu', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Honolulu'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Pohnpei', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Pohnpei', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Pohnpei'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Pago_Pago', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Pago_Pago', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Pago_Pago'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Truk', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Truk', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Truk'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Pitcairn', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Pitcairn', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Pitcairn'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Marquesas', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Marquesas', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Marquesas'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Tarawa', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Tarawa', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Tarawa'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Rarotonga', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Rarotonga', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Rarotonga'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Samoa', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Samoa', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Samoa'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Kiritimati', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Kiritimati', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Kiritimati'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific/Enderbury', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Enderbury', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific/Enderbury'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Pacific', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Pacific'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/MST', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/MST', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/MST'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/NZ', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/NZ', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/NZ'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Arctic/Longyearbyen', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Arctic/Longyearbyen', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Arctic/Longyearbyen'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Arctic', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Arctic', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Arctic'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Universal', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Universal', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Universal'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Libya', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Libya', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Libya'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Turkey', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Turkey', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Turkey'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/iso3166.tab', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/iso3166.tab', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/iso3166.tab'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/EST5EDT', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/EST5EDT', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/EST5EDT'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Greenwich', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Greenwich', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Greenwich'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Puerto_Rico', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Puerto_Rico', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Puerto_Rico'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Recife', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Recife', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Recife'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Resolute', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Resolute', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Resolute'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Manaus', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Manaus', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Manaus'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/New_York', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/New_York', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/New_York'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Rankin_Inlet', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Rankin_Inlet', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Rankin_Inlet'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Lima', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Lima', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Lima'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/St_Barthelemy', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/St_Barthelemy', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/St_Barthelemy'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Santo_Domingo', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Santo_Domingo', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Santo_Domingo'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Detroit', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Detroit', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Detroit'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Paramaribo', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Paramaribo', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Paramaribo'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Yakutat', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Yakutat', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Yakutat'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Santarem', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Santarem', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Santarem'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Scoresbysund', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Scoresbysund', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Scoresbysund'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Santiago', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Santiago', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Santiago'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Guyana', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Guyana', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Guyana'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Coral_Harbour', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Coral_Harbour', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Coral_Harbour'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Rio_Branco', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Rio_Branco', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Rio_Branco'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Porto_Acre', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Porto_Acre', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Porto_Acre'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Nipigon', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Nipigon', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Nipigon'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Edmonton', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Edmonton', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Edmonton'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Port_of_Spain', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Port_of_Spain', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Port_of_Spain'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Lower_Princes', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Lower_Princes', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Lower_Princes'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/St_Thomas', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/St_Thomas', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/St_Thomas'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Guatemala', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Guatemala', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Guatemala'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Catamarca', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Catamarca', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Catamarca'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Antigua', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Antigua', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Antigua'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Porto_Velho', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Porto_Velho', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Porto_Velho'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Rosario', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Rosario', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Rosario'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Chicago', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Chicago', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Chicago'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Creston', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Creston', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Creston'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Managua', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Managua', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Managua'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Nassau', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Nassau', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Nassau'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Bogota', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Bogota', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Bogota'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Cancun', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Cancun', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Cancun'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Chihuahua', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Chihuahua', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Chihuahua'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Campo_Grande', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Campo_Grande', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Campo_Grande'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Halifax', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Halifax', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Halifax'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Boise', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Boise', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Boise'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Montreal', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Montreal', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Montreal'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Goose_Bay', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Goose_Bay', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Goose_Bay'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Sao_Paulo', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Sao_Paulo', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Sao_Paulo'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Blanc-Sablon', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Blanc-Sablon', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Blanc-Sablon'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Phoenix', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Phoenix', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Phoenix'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Atikokan', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Atikokan', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Atikokan'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Cayenne', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Cayenne', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Cayenne'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Santa_Isabel', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Santa_Isabel', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Santa_Isabel'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Boa_Vista', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Boa_Vista', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Boa_Vista'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Bahia_Banderas', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Bahia_Banderas', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Bahia_Banderas'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Indiana/Vevay', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Indiana/Vevay', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Indiana/Vevay'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Indiana/Indianapolis', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Indiana/Indianapolis', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Indiana/Indianapolis'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Indiana/Winamac', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Indiana/Winamac', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Indiana/Winamac'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Indiana/Tell_City', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Indiana/Tell_City', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Indiana/Tell_City'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Indiana/Petersburg', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Indiana/Petersburg', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Indiana/Petersburg'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Indiana/Vincennes', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Indiana/Vincennes', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Indiana/Vincennes'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Indiana/Knox', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Indiana/Knox', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Indiana/Knox'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Indiana/Marengo', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Indiana/Marengo', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Indiana/Marengo'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Indiana', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Indiana', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Indiana'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Indianapolis', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Indianapolis', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Indianapolis'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Dominica', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Dominica', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Dominica'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Argentina/Salta', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Argentina/Salta', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Argentina/Salta'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Argentina/Ushuaia', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Argentina/Ushuaia', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Argentina/Ushuaia'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Argentina/Catamarca', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Argentina/Catamarca', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Argentina/Catamarca'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Argentina/ComodRivadavia', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Argentina/ComodRivadavia', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Argentina/ComodRivadavia'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Argentina/San_Juan', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Argentina/San_Juan', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Argentina/San_Juan'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Argentina/San_Luis', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Argentina/San_Luis', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Argentina/San_Luis'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Argentina/Rio_Gallegos', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Argentina/Rio_Gallegos', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Argentina/Rio_Gallegos'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Argentina/Jujuy', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Argentina/Jujuy', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Argentina/Jujuy'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Argentina/Tucuman', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Argentina/Tucuman', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Argentina/Tucuman'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Argentina/Buenos_Aires', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Argentina/Buenos_Aires', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Argentina/Buenos_Aires'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Argentina/Cordoba', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Argentina/Cordoba', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Argentina/Cordoba'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Argentina/La_Rioja', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Argentina/La_Rioja', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Argentina/La_Rioja'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Argentina/Mendoza', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Argentina/Mendoza', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Argentina/Mendoza'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Argentina', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Argentina', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Argentina'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/La_Paz', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/La_Paz', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/La_Paz'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Dawson', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Dawson', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Dawson'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Moncton', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Moncton', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Moncton'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Matamoros', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Matamoros', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Matamoros'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/St_Vincent', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/St_Vincent', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/St_Vincent'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Regina', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Regina', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Regina'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Yellowknife', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Yellowknife', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Yellowknife'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Rainy_River', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Rainy_River', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Rainy_River'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Kralendijk', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Kralendijk', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Kralendijk'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Monterrey', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Monterrey', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Monterrey'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Jamaica', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Jamaica', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Jamaica'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Havana', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Havana', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Havana'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Tegucigalpa', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Tegucigalpa', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Tegucigalpa'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Guayaquil', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Guayaquil', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Guayaquil'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Metlakatla', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Metlakatla', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Metlakatla'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Mazatlan', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Mazatlan', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Mazatlan'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Belize', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Belize', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Belize'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Knox_IN', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Knox_IN', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Knox_IN'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Cuiaba', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Cuiaba', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Cuiaba'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Merida', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Merida', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Merida'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Jujuy', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Jujuy', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Jujuy'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Cayman', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Cayman', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Cayman'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Belem', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Belem', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Belem'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Eirunepe', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Eirunepe', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Eirunepe'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/St_Lucia', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/St_Lucia', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/St_Lucia'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Bahia', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Bahia', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Bahia'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Whitehorse', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Whitehorse', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Whitehorse'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Tortola', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Tortola', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Tortola'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Vancouver', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Vancouver', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Vancouver'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Inuvik', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Inuvik', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Inuvik'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Port-au-Prince', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Port-au-Prince', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Port-au-Prince'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Fortaleza', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Fortaleza', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Fortaleza'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Noronha', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Noronha', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Noronha'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Buenos_Aires', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Buenos_Aires', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Buenos_Aires'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Los_Angeles', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Los_Angeles', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Los_Angeles'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/El_Salvador', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/El_Salvador', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/El_Salvador'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Denver', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Denver', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Denver'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Fort_Wayne', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Fort_Wayne', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Fort_Wayne'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Kentucky/Louisville', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Kentucky/Louisville', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Kentucky/Louisville'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Kentucky/Monticello', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Kentucky/Monticello', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Kentucky/Monticello'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Kentucky', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Kentucky', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Kentucky'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/North_Dakota/New_Salem', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/North_Dakota/New_Salem', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/North_Dakota/New_Salem'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/North_Dakota/Center', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/North_Dakota/Center', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/North_Dakota/Center'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/North_Dakota/Beulah', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/North_Dakota/Beulah', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/North_Dakota/Beulah'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/North_Dakota', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/North_Dakota', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/North_Dakota'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Glace_Bay', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Glace_Bay', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Glace_Bay'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Montserrat', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Montserrat', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Montserrat'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Toronto', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Toronto', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Toronto'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Panama', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Panama', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Panama'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Cordoba', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Cordoba', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Cordoba'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Louisville', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Louisville', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Louisville'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Ensenada', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Ensenada', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Ensenada'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Shiprock', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Shiprock', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Shiprock'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Ojinaga', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Ojinaga', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Ojinaga'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Thule', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Thule', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Thule'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Caracas', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Caracas', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Caracas'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Araguaina', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Araguaina', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Araguaina'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Cambridge_Bay', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Cambridge_Bay', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Cambridge_Bay'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Winnipeg', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Winnipeg', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Winnipeg'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Grand_Turk', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Grand_Turk', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Grand_Turk'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Virgin', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Virgin', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Virgin'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Anchorage', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Anchorage', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Anchorage'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Costa_Rica', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Costa_Rica', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Costa_Rica'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Nome', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Nome', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Nome'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Grenada', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Grenada', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Grenada'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/St_Johns', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/St_Johns', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/St_Johns'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Atka', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Atka', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Atka'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Asuncion', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Asuncion', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Asuncion'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Hermosillo', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Hermosillo', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Hermosillo'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Tijuana', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Tijuana', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Tijuana'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Marigot', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Marigot', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Marigot'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Juneau', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Juneau', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Juneau'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Montevideo', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Montevideo', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Montevideo'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Godthab', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Godthab', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Godthab'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Guadeloupe', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Guadeloupe', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Guadeloupe'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Maceio', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Maceio', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Maceio'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Pangnirtung', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Pangnirtung', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Pangnirtung'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/St_Kitts', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/St_Kitts', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/St_Kitts'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Barbados', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Barbados', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Barbados'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Iqaluit', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Iqaluit', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Iqaluit'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Menominee', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Menominee', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Menominee'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Martinique', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Martinique', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Martinique'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Mexico_City', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Mexico_City', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Mexico_City'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Swift_Current', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Swift_Current', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Swift_Current'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Miquelon', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Miquelon', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Miquelon'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Curacao', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Curacao', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Curacao'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Dawson_Creek', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Dawson_Creek', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Dawson_Creek'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Mendoza', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Mendoza', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Mendoza'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Adak', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Adak', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Adak'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Thunder_Bay', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Thunder_Bay', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Thunder_Bay'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Aruba', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Aruba', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Aruba'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Sitka', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Sitka', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Sitka'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Anguilla', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Anguilla', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Anguilla'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America/Danmarkshavn', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Danmarkshavn', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America/Danmarkshavn'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/America', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/America'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Australia/Melbourne', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Melbourne', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Melbourne'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Australia/Queensland', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Queensland', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Queensland'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Australia/North', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/North', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/North'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Australia/Lord_Howe', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Lord_Howe', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Lord_Howe'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Australia/Adelaide', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Adelaide', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Adelaide'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Australia/Yancowinna', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Yancowinna', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Yancowinna'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Australia/Victoria', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Victoria', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Victoria'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Australia/Canberra', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Canberra', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Canberra'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Australia/Sydney', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Sydney', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Sydney'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Australia/ACT', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/ACT', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/ACT'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Australia/Eucla', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Eucla', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Eucla'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Australia/Brisbane', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Brisbane', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Brisbane'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Australia/Tasmania', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Tasmania', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Tasmania'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Australia/Hobart', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Hobart', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Hobart'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Australia/Perth', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Perth', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Perth'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Australia/South', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/South', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/South'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Australia/Lindeman', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Lindeman', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Lindeman'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Australia/Darwin', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Darwin', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Darwin'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Australia/West', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/West', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/West'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Australia/LHI', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/LHI', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/LHI'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Australia/NSW', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/NSW', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/NSW'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Australia/Broken_Hill', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Broken_Hill', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Broken_Hill'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Australia/Currie', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Currie', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia/Currie'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Australia', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Australia'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT-10', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-10', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-10'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT+12', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT+12', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT+12'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT-11', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-11', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-11'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/Universal', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/Universal', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/Universal'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/Greenwich', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/Greenwich', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/Greenwich'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT-6', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-6', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-6'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT-1', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-1', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-1'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT-8', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-8', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-8'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT+4', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT+4', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT+4'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT+3', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT+3', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT+3'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT-9', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-9', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-9'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT-0', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-0', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-0'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT-7', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-7', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-7'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT+2', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT+2', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT+2'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT+5', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT+5', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT+5'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/Zulu', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/Zulu', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/Zulu'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT+11', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT+11', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT+11'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT-13', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-13', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-13'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT-14', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-14', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-14'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT+10', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT+10', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT+10'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT-12', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-12', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-12'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT0', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT0', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT0'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/UCT', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/UCT', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/UCT'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT+0', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT+0', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT+0'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT+7', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT+7', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT+7'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT+9', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT+9', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT+9'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT-2', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-2', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-2'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT-5', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-5', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-5'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT+8', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT+8', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT+8'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT+6', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT+6', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT+6'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT+1', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT+1', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT+1'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/UTC', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/UTC', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/UTC'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT-4', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-4', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-4'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc/GMT-3', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-3', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc/GMT-3'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Etc', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Etc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/NZ-CHAT', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/NZ-CHAT', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/NZ-CHAT'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Dushanbe', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Dushanbe', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Dushanbe'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Calcutta', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Calcutta', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Calcutta'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Urumqi', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Urumqi', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Urumqi'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Karachi', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Karachi', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Karachi'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Khandyga', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Khandyga', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Khandyga'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Thimbu', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Thimbu', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Thimbu'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Thimphu', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Thimphu', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Thimphu'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Vladivostok', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Vladivostok', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Vladivostok'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Vientiane', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Vientiane', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Vientiane'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Shanghai', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Shanghai', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Shanghai'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Ulan_Bator', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Ulan_Bator', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Ulan_Bator'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Aden', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Aden', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Aden'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Muscat', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Muscat', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Muscat'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Damascus', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Damascus', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Damascus'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Jerusalem', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Jerusalem', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Jerusalem'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Brunei', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Brunei', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Brunei'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Ulaanbaatar', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Ulaanbaatar', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Ulaanbaatar'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Amman', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Amman', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Amman'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Riyadh88', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Riyadh88', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Riyadh88'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Kuching', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Kuching', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Kuching'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Tel_Aviv', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Tel_Aviv', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Tel_Aviv'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Seoul', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Seoul', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Seoul'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Pyongyang', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Pyongyang', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Pyongyang'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Riyadh89', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Riyadh89', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Riyadh89'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Hovd', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Hovd', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Hovd'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Riyadh87', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Riyadh87', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Riyadh87'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Hebron', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Hebron', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Hebron'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Kuwait', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Kuwait', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Kuwait'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Manila', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Manila', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Manila'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Katmandu', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Katmandu', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Katmandu'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Gaza', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Gaza', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Gaza'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Samarkand', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Samarkand', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Samarkand'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Taipei', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Taipei', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Taipei'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Tashkent', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Tashkent', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Tashkent'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Yekaterinburg', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Yekaterinburg', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Yekaterinburg'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Macau', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Macau', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Macau'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Qyzylorda', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Qyzylorda', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Qyzylorda'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Macao', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Macao', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Macao'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Tokyo', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Tokyo', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Tokyo'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Baku', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Baku', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Baku'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Istanbul', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Istanbul', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Istanbul'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Irkutsk', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Irkutsk', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Irkutsk'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Qatar', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Qatar', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Qatar'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Bahrain', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Bahrain', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Bahrain'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Yerevan', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Yerevan', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Yerevan'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Almaty', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Almaty', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Almaty'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Dili', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Dili', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Dili'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Dacca', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Dacca', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Dacca'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Chongqing', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Chongqing', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Chongqing'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Ust-Nera', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Ust-Nera', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Ust-Nera'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Magadan', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Magadan', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Magadan'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Colombo', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Colombo', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Colombo'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Krasnoyarsk', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Krasnoyarsk', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Krasnoyarsk'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Kamchatka', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Kamchatka', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Kamchatka'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Ujung_Pandang', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Ujung_Pandang', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Ujung_Pandang'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Jakarta', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Jakarta', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Jakarta'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Kolkata', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Kolkata', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Kolkata'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Kabul', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Kabul', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Kabul'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Oral', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Oral', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Oral'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Jayapura', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Jayapura', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Jayapura'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Pontianak', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Pontianak', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Pontianak'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Makassar', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Makassar', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Makassar'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Tbilisi', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Tbilisi', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Tbilisi'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Singapore', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Singapore', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Singapore'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Harbin', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Harbin', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Harbin'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Kashgar', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Kashgar', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Kashgar'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Dhaka', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Dhaka', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Dhaka'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Yakutsk', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Yakutsk', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Yakutsk'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Kuala_Lumpur', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Kuala_Lumpur', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Kuala_Lumpur'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Tehran', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Tehran', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Tehran'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Beirut', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Beirut', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Beirut'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Aqtobe', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Aqtobe', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Aqtobe'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Anadyr', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Anadyr', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Anadyr'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Bishkek', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Bishkek', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Bishkek'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Dubai', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Dubai', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Dubai'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Riyadh', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Riyadh', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Riyadh'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Novokuznetsk', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Novokuznetsk', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Novokuznetsk'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Aqtau', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Aqtau', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Aqtau'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Omsk', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Omsk', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Omsk'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Ashkhabad', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Ashkhabad', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Ashkhabad'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Saigon', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Saigon', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Saigon'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Sakhalin', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Sakhalin', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Sakhalin'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Hong_Kong', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Hong_Kong', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Hong_Kong'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Phnom_Penh', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Phnom_Penh', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Phnom_Penh'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Nicosia', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Nicosia', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Nicosia'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Baghdad', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Baghdad', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Baghdad'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Ashgabat', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Ashgabat', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Ashgabat'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Kathmandu', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Kathmandu', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Kathmandu'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Choibalsan', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Choibalsan', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Choibalsan'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Bangkok', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Bangkok', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Bangkok'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Chungking', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Chungking', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Chungking'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Novosibirsk', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Novosibirsk', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Novosibirsk'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Rangoon', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Rangoon', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Rangoon'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia/Ho_Chi_Minh', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Ho_Chi_Minh', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia/Ho_Chi_Minh'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Asia', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Asia'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/MET', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/MET', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/MET'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Portugal', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Portugal', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Portugal'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/localtime', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/localtime', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/localtime'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Antarctica/Palmer', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Antarctica/Palmer', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Antarctica/Palmer'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Antarctica/Davis', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Antarctica/Davis', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Antarctica/Davis'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Antarctica/Rothera', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Antarctica/Rothera', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Antarctica/Rothera'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Antarctica/Vostok', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Antarctica/Vostok', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Antarctica/Vostok'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Antarctica/Syowa', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Antarctica/Syowa', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Antarctica/Syowa'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Antarctica/DumontDUrville', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Antarctica/DumontDUrville', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Antarctica/DumontDUrville'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Antarctica/McMurdo', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Antarctica/McMurdo', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Antarctica/McMurdo'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Antarctica/Macquarie', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Antarctica/Macquarie', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Antarctica/Macquarie'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Antarctica/South_Pole', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Antarctica/South_Pole', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Antarctica/South_Pole'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Antarctica/Mawson', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Antarctica/Mawson', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Antarctica/Mawson'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Antarctica/Casey', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Antarctica/Casey', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Antarctica/Casey'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Antarctica', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Antarctica', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Antarctica'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/GMT-0', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/GMT-0', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/GMT-0'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/CET', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/CET', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/CET'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Eire', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Eire', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Eire'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/PST8PDT', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/PST8PDT', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/PST8PDT'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Jamaica', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Jamaica', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Jamaica'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/GMT', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/GMT', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/GMT'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Zulu', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Zulu', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Zulu'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Japan', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Japan', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Japan'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/ROC', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/ROC', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/ROC'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/GB-Eire', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/GB-Eire', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/GB-Eire'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Zurich', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Zurich', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Zurich'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Paris', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Paris', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Paris'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Moscow', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Moscow', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Moscow'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Luxembourg', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Luxembourg', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Luxembourg'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Ljubljana', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Ljubljana', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Ljubljana'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Helsinki', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Helsinki', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Helsinki'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Minsk', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Minsk', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Minsk'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Skopje', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Skopje', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Skopje'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Dublin', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Dublin', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Dublin'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Jersey', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Jersey', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Jersey'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/San_Marino', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/San_Marino', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/San_Marino'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Gibraltar', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Gibraltar', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Gibraltar'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Belgrade', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Belgrade', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Belgrade'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Guernsey', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Guernsey', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Guernsey'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Vaduz', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Vaduz', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Vaduz'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Istanbul', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Istanbul', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Istanbul'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Lisbon', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Lisbon', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Lisbon'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Uzhgorod', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Uzhgorod', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Uzhgorod'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Tirane', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Tirane', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Tirane'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Tiraspol', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Tiraspol', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Tiraspol'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Sarajevo', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Sarajevo', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Sarajevo'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Madrid', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Madrid', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Madrid'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Podgorica', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Podgorica', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Podgorica'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Busingen', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Busingen', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Busingen'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Vatican', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Vatican', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Vatican'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Belfast', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Belfast', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Belfast'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Bratislava', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Bratislava', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Bratislava'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Kiev', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Kiev', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Kiev'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Kaliningrad', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Kaliningrad', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Kaliningrad'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Zaporozhye', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Zaporozhye', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Zaporozhye'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Vienna', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Vienna', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Vienna'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Budapest', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Budapest', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Budapest'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Vilnius', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Vilnius', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Vilnius'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Monaco', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Monaco', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Monaco'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Oslo', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Oslo', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Oslo'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Simferopol', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Simferopol', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Simferopol'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Volgograd', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Volgograd', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Volgograd'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Isle_of_Man', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Isle_of_Man', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Isle_of_Man'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/London', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/London', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/London'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Riga', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Riga', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Riga'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Andorra', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Andorra', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Andorra'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Prague', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Prague', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Prague'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Berlin', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Berlin', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Berlin'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Tallinn', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Tallinn', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Tallinn'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Rome', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Rome', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Rome'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Malta', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Malta', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Malta'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Zagreb', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Zagreb', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Zagreb'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Amsterdam', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Amsterdam', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Amsterdam'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Nicosia', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Nicosia', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Nicosia'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Bucharest', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Bucharest', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Bucharest'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Copenhagen', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Copenhagen', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Copenhagen'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Chisinau', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Chisinau', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Chisinau'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Mariehamn', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Mariehamn', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Mariehamn'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Sofia', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Sofia', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Sofia'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Athens', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Athens', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Athens'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Stockholm', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Stockholm', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Stockholm'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Samara', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Samara', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Samara'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Brussels', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Brussels', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Brussels'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe/Warsaw', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Warsaw', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe/Warsaw'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Europe', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Europe'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/ROK', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/ROK', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/ROK'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Navajo', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Navajo', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Navajo'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Singapore', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Singapore', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Singapore'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/posixrules', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/posixrules', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/posixrules'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/GB', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/GB', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/GB'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Mexico/BajaNorte', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Mexico/BajaNorte', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Mexico/BajaNorte'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Mexico/General', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Mexico/General', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Mexico/General'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Mexico/BajaSur', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Mexico/BajaSur', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Mexico/BajaSur'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Mexico', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Mexico', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Mexico'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/EST', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/EST', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/EST'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/GMT0', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/GMT0', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/GMT0'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Hongkong', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Hongkong', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Hongkong'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/PRC', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/PRC', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/PRC'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/zone.tab', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/zone.tab', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/zone.tab'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Iran', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Iran', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Iran'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/MST7MDT', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/MST7MDT', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/MST7MDT'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/WET', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/WET', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/WET'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/W-SU', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/W-SU', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/W-SU'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/UCT', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/UCT', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/UCT'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Cuba', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Cuba', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Cuba'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Egypt', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Egypt', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Egypt'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/GMT+0', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/GMT+0', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/GMT+0'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/EET', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/EET', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/EET'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Israel', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Israel', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Israel'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Sao_Tome', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Sao_Tome', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Sao_Tome'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Conakry', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Conakry', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Conakry'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Dakar', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Dakar', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Dakar'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Ndjamena', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Ndjamena', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Ndjamena'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Casablanca', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Casablanca', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Casablanca'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Lome', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Lome', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Lome'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Algiers', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Algiers', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Algiers'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Mogadishu', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Mogadishu', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Mogadishu'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Lagos', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Lagos', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Lagos'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Brazzaville', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Brazzaville', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Brazzaville'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Timbuktu', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Timbuktu', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Timbuktu'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Nouakchott', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Nouakchott', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Nouakchott'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Maseru', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Maseru', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Maseru'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Libreville', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Libreville', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Libreville'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Harare', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Harare', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Harare'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Malabo', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Malabo', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Malabo'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Bangui', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Bangui', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Bangui'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Nairobi', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Nairobi', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Nairobi'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Kinshasa', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Kinshasa', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Kinshasa'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Porto-Novo', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Porto-Novo', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Porto-Novo'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Cairo', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Cairo', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Cairo'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Douala', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Douala', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Douala'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Juba', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Juba', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Juba'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Gaborone', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Gaborone', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Gaborone'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Tunis', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Tunis', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Tunis'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Kampala', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Kampala', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Kampala'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Mbabane', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Mbabane', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Mbabane'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Addis_Ababa', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Addis_Ababa', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Addis_Ababa'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Maputo', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Maputo', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Maputo'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Bissau', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Bissau', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Bissau'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Blantyre', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Blantyre', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Blantyre'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Niamey', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Niamey', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Niamey'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Banjul', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Banjul', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Banjul'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Abidjan', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Abidjan', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Abidjan'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Asmara', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Asmara', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Asmara'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Bamako', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Bamako', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Bamako'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Ouagadougou', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Ouagadougou', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Ouagadougou'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Lusaka', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Lusaka', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Lusaka'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Luanda', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Luanda', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Luanda'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Asmera', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Asmera', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Asmera'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Lubumbashi', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Lubumbashi', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Lubumbashi'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Accra', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Accra', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Accra'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Khartoum', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Khartoum', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Khartoum'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Ceuta', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Ceuta', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Ceuta'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Bujumbura', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Bujumbura', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Bujumbura'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Windhoek', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Windhoek', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Windhoek'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/El_Aaiun', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/El_Aaiun', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/El_Aaiun'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Tripoli', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Tripoli', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Tripoli'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Monrovia', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Monrovia', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Monrovia'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Dar_es_Salaam', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Dar_es_Salaam', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Dar_es_Salaam'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Johannesburg', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Johannesburg', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Johannesburg'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Kigali', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Kigali', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Kigali'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Djibouti', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Djibouti', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Djibouti'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa/Freetown', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Freetown', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa/Freetown'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Africa', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Africa'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Factory', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Factory', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Factory'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/UTC', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/UTC', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/UTC'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Chile/EasterIsland', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Chile/EasterIsland', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Chile/EasterIsland'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Chile/Continental', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Chile/Continental', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Chile/Continental'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Chile', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Chile', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Chile'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/HST', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/HST', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/HST'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Canada/Atlantic', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Canada/Atlantic', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Canada/Atlantic'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Canada/Pacific', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Canada/Pacific', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Canada/Pacific'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Canada/Eastern', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Canada/Eastern', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Canada/Eastern'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Canada/Yukon', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Canada/Yukon', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Canada/Yukon'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Canada/Saskatchewan', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Canada/Saskatchewan', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Canada/Saskatchewan'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Canada/Newfoundland', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Canada/Newfoundland', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Canada/Newfoundland'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Canada/East-Saskatchewan', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Canada/East-Saskatchewan', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Canada/East-Saskatchewan'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Canada/Central', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Canada/Central', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Canada/Central'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Canada/Mountain', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Canada/Mountain', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Canada/Mountain'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Canada', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Canada', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Canada'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo/Iceland', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Iceland', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo/Iceland'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/zoneinfo', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/zoneinfo'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/tzfile.py', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/tzfile.py', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/tzfile.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/reference.pyc', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/reference.pyc', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/reference.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/tzinfo.py', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/tzinfo.py', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/tzinfo.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/__init__.py', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/__init__.py', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/__init__.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/tzfile.pyc', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/tzfile.pyc', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/tzfile.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/reference.py', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/reference.py', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/reference.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/__init__.pyc', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/__init__.pyc', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/__init__.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/exceptions.py', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/exceptions.py', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/exceptions.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/lazy.pyc', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/lazy.pyc', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/lazy.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/lazy.py', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/lazy.py', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/lazy.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/exceptions.pyc', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/exceptions.pyc', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/exceptions.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz/tzinfo.pyc', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/tzinfo.pyc', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn/tzinfo.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pytz', '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn', "[Errno 1] Operation not permitted: '/private/var/folders/49/kv8cjk0x0rd19ggm0k7017_40000gn/T/pip-uninstall-M3jmfn'")] make: *** [install] Error 1 On Wed, Aug 7, 2019 at 6:09 PM Cameron Simpson wrote: > On 07Aug2019 13:08, Richard Rizk wrote: > >I wanted to send you this email to ask if you would have someone that > >can solve the problem I'm having with python. > > > >I'm having issues with terminal on mac, is there someone that can help > >with this? > > I probably can. Is this a Python problem, a Terminal problem, or some > kind of mix? > > Anyway, followup and describe your issue and we'll see. > > Remember that this list drops attachments, so all your description > should be text in the message, including and cut/paste of terminal > output (which we usually want for context, and it is more precise than > loose verbal descriptions alone). > > Cheers, > Cameron Simpson > From mats at wichmann.us Wed Aug 7 21:54:25 2019 From: mats at wichmann.us (Mats Wichmann) Date: Wed, 7 Aug 2019 19:54:25 -0600 Subject: [Tutor] Error terminal In-Reply-To: References: <0E38C790-78B9-43A7-93A2-6CFE6064217C@gmail.com> <20190807220930.GA59371@cskk.homeip.net> Message-ID: On 8/7/19 5:27 PM, Richard Rizk wrote: > Thank you Cameron for your message. > > Please find below the error message i am receiving. > > I think the command line i'm running is trying to connect with the > python3.7 that i have on my computer which is a requirement for the command > line to work but it keeps connecting to the default python2.7 that is on > Macbook. > > I'd love to jump on a 15min call if it's possible for you. > > Best regards, > Richard > > Error: > ------------- > > DEPRECATION: Python 2.7 will reach the end of its life on January 1st, > 2020. Please upgrade your Python as Python 2.7 won't be maintained after > that date. A future version of pip will drop support for Python 2.7. More > details about Python 2 support in pip, can be found at > https://pip.pypa.io/en/latest/development/release-process/#python-2-support Whichever way you get the Python you want to work for you, use the same way to do installs. Thus, if it works like this: $ python3 Python 3.7.2 (default, Dec 27 2018, 07:35:45) [Clang 9.0.0 (clang-900.0.39.2)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> Then request your installations like this: $ python3 -m pip install bunch-o-stuff Your instructions probably said do "pip install bunch-o-stuff", don't do it that way. You can also check what you're getting this way (this is a snip from my system, where the Python 3 came from homebrew, which is how I happen to install it): $ which python /usr/bin/python # system version, you don't want this one $ which python3 /usr/local/bin/python From mhysnm1964 at gmail.com Fri Aug 9 04:54:07 2019 From: mhysnm1964 at gmail.com (mhysnm1964 at gmail.com) Date: Fri, 9 Aug 2019 18:54:07 +1000 Subject: [Tutor] Object creation query Message-ID: <024001d54e90$0283d8f0$078b8ad0$@gmail.com> All, I think I am asking for the impossible here. But I will ask anyway. I am using flask_sqlalchemy to build the tables and perform the queries, updates and insertions. I have multiple tables with the same structure with different names. A table called accounts which stores the name of the tables with the same structures. This is the important bits to know about. I have a page called transactions. When I call this page, I can append different names to the end. For example: Transactions/account1 Transactions/account2 Transactions/account3 . In the view for transactions I am doing the following (code extract) @app.route('/transactions/') def transactions(account): if accounts != "Transactions": Accounts.query.filter_by(account_name =account).first_or_404() tables = Accounts.query.all() if account == 'Account1': records = Account1 elif account == 'Account2': records = Account2 records = records.query.order_by(records.date.desc) as I am saving each model object into the same variable depending on the full URL name. I am wondering if there is a better way in doing this rather than using a list of if tests? From __peter__ at web.de Fri Aug 9 06:56:42 2019 From: __peter__ at web.de (Peter Otten) Date: Fri, 09 Aug 2019 12:56:42 +0200 Subject: [Tutor] Object creation query References: <024001d54e90$0283d8f0$078b8ad0$@gmail.com> Message-ID: mhysnm1964 at gmail.com wrote: > All, > > > > I think I am asking for the impossible here. But I will ask anyway. > > > > I am using flask_sqlalchemy to build the tables and perform the queries, > updates and insertions. I have multiple tables with the same structure > with different names. A table called accounts which stores the name of the > tables with the same structures. This is the important bits to know about. > > > > I have a page called transactions. When I call this page, I can append > different names to the end. For example: > > > > Transactions/account1 > > Transactions/account2 > > Transactions/account3 > > . > > > > In the view for transactions I am doing the following (code extract) > > > > @app.route('/transactions/') > > def transactions(account): > > if accounts != "Transactions": > > Accounts.query.filter_by(account_name =account).first_or_404() > > tables = Accounts.query.all() > > if account == 'Account1': > > records = Account1 > > elif account == 'Account2': > > records = Account2 > > records = records.query.order_by(records.date.desc) > > > > as I am saving each model object into the same variable depending on the > full URL name. I am wondering if there is a better way in doing this > rather than using a list of if tests? How about using only one table AccountEntries with an AccountId column which would also be the primary key of the Accounts table. Then # pseudo code # look up account wanted_accountId = select acountId from Accounts where name = account # find records for account records = select * from AccountEntries where accountId = wanted_accountId order by date desc That design would greatly simplify adding accounts 3 to, say, 300000. From alan.gauld at yahoo.co.uk Fri Aug 9 07:39:30 2019 From: alan.gauld at yahoo.co.uk (Alan Gauld) Date: Fri, 9 Aug 2019 12:39:30 +0100 Subject: [Tutor] Object creation query In-Reply-To: <024001d54e90$0283d8f0$078b8ad0$@gmail.com> References: <024001d54e90$0283d8f0$078b8ad0$@gmail.com> Message-ID: On 09/08/2019 09:54, mhysnm1964 at gmail.com wrote: > updates and insertions. I have multiple tables with the same structure with > different names. Umm, why? Assuming by structure you mean they have the same fields then that's usually a bad design decision. Why not have one table with an attribute "name" or "Type" or similar? That should greatly simplify your code. If that's not what you mean by the same structure you need to give us a little more detail. Not necessarily the full descriptions but some simplified examples maybe? -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos From ingo at ingoogni.nl Fri Aug 9 13:55:21 2019 From: ingo at ingoogni.nl (ingo) Date: Fri, 9 Aug 2019 19:55:21 +0200 Subject: [Tutor] instantiate and name a class from / with a string Message-ID: With the available classes Root, Channel and SSE I build the following (in CherryPy): root = Root() root.channel = Channel() root.channel.weather = SSE('weather') root.channel.energy = SSE('energy') root.channel.mail = SSE('mail') root.channel.rss = SSE('rss') ... http://example.com/channel/weather/ will then become the emitter of the weather event stream. I'd like create the instances of SSE programmatically by pulling the string 'weather', 'energy' etc. from a database. Ingo From bgailer at gmail.com Fri Aug 9 19:40:18 2019 From: bgailer at gmail.com (bob gailer) Date: Fri, 9 Aug 2019 19:40:18 -0400 Subject: [Tutor] instantiate and name a class from / with a string In-Reply-To: References: Message-ID: On 8/9/2019 1:55 PM, ingo wrote: > With the available classes Root, Channel and SSE I build the following > (in CherryPy): > > root = Root() > root.channel = Channel() > > root.channel.weather = SSE('weather') > root.channel.energy = SSE('energy') > root.channel.mail = SSE('mail') > root.channel.rss = SSE('rss') > ... > > http://example.com/channel/weather/ will then become the emitter of the > weather event stream. > > I'd like create the instances of SSE programmatically by pulling the > string 'weather', 'energy' etc. from a database. Are you asking for help in obtaining a value from a database? Or how to dynamically create instances assigned to root.channel attributes? Assuming the latter: name = # get from data base setattr(root.channel, name, SSE(name)) -- Bob Gailer From bgailer at gmail.com Fri Aug 9 19:43:19 2019 From: bgailer at gmail.com (bob gailer) Date: Fri, 9 Aug 2019 19:43:19 -0400 Subject: [Tutor] Object creation query In-Reply-To: References: <024001d54e90$0283d8f0$078b8ad0$@gmail.com> Message-ID: <6e23c15b-1fc4-47f5-b645-4bfad5f89c09@gmail.com> On 8/9/2019 7:39 AM, Alan Gauld via Tutor wrote: > On 09/08/2019 09:54, mhysnm1964 at gmail.com wrote: > >> updates and insertions. I have multiple tables with the same structure with >> differe I agree 100% with Peter and Alan's responses. -- Bob Gailer From mats at wichmann.us Fri Aug 9 23:57:26 2019 From: mats at wichmann.us (Mats Wichmann) Date: Fri, 9 Aug 2019 21:57:26 -0600 Subject: [Tutor] instantiate and name a class from / with a string In-Reply-To: References: Message-ID: <5c828570-c78b-0655-890a-23208b8439e5@wichmann.us> On 8/9/19 11:55 AM, ingo wrote: > With the available classes Root, Channel and SSE I build the following > (in CherryPy): > > root = Root() > root.channel = Channel() > > root.channel.weather = SSE('weather') > root.channel.energy = SSE('energy') > root.channel.mail = SSE('mail') > root.channel.rss = SSE('rss') > ... > > http://example.com/channel/weather/ will then become the emitter of the > weather event stream. > > I'd like create the instances of SSE programmatically by pulling the > string 'weather', 'energy' etc. from a database. To channel Bob: what are you actually asking for here? We can't figure it out. Is there some database that has these strings? If so, what is it? Or do you mean "some data structure in your program that maps those strings to something to do with them" (if so, where do you get that information from?) "With the available classes... in CherryPy" Available from where? Your code? Some external piece of code you're using? Does CherryPy actually have anything to do with the question you're not quite asking? Please be more precise. We're not trying to be argumentative; you have to help us know enough before we can help you. From ingo at ingoogni.nl Sat Aug 10 02:16:45 2019 From: ingo at ingoogni.nl (ingo) Date: Sat, 10 Aug 2019 08:16:45 +0200 Subject: [Tutor] instantiate and name a class from / with a string In-Reply-To: <5c828570-c78b-0655-890a-23208b8439e5@wichmann.us> References: <5c828570-c78b-0655-890a-23208b8439e5@wichmann.us> Message-ID: <54791220-d6e8-0e79-96e9-eee725c6f077@ingoogni.nl> On 10-8-2019 05:57, Mats Wichmann wrote: > Please be more precise. We're not trying to be argumentative; you have > to help us know enough before we can help you. > Mats, Bob, sorry for not being clear. I have the string and want to create the instances. Bob's name = # get from data base setattr(root.channel, name, SSE(name)) is what I was looking for, time to read up on attributes, Thanks, Ingo From alan.gauld at yahoo.co.uk Sat Aug 10 08:17:06 2019 From: alan.gauld at yahoo.co.uk (Alan Gauld) Date: Sat, 10 Aug 2019 13:17:06 +0100 Subject: [Tutor] Object creation query In-Reply-To: <02a001d54f58$5e855390$1b8ffab0$@gmail.com> References: <024001d54e90$0283d8f0$078b8ad0$@gmail.com> <02a001d54f58$5e855390$1b8ffab0$@gmail.com> Message-ID: On 10/08/2019 09:48, mhysnm1964 at gmail.com wrote: > HI all, > > I have multiple different accounts that I am creating reports for. Thus I > cannot have a centralised transaction table that contains all the records. > These different accounts are for different organisations or for other > members in my family. That shouldn't make any difference. It would be impractical to have different tables for each customer or organisation in something like a large utility company or say., Amazon where there will be literally millions of account holders. You would need millions of tables which would be a nightmare to manage. The standard model for these kinds of scenarios is a single account table with a reference to the customer(or user) table and a transaction table with a reference to the account. That supports the concept of multiple customers, each with (potentially)multiple accounts and each account having multiple transactions. > I hope this explains what I am trying to do. I am trying to make things as > dynamic as possible without myself recoding the model. You can make it as dynamic as you like using a single table and you certainly shouldn't need to recode the model, although I'm not familiar with SQLAlchemy (which is the ORM wrapper you are using I think?) But you might need to tweak you object definition to make it single table based. > Also was wondering if it was possible as well. Anything is possible, it just takes more effort. In this case quite a lot more effort. -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos From jjhartley at gmail.com Sun Aug 11 23:58:37 2019 From: jjhartley at gmail.com (James Hartley) Date: Sun, 11 Aug 2019 22:58:37 -0500 Subject: [Tutor] class functions/staticmethod? Message-ID: I am lacking in understanding of the @staticmethod property. Explanation(s)/links might be helpful. I have not found the descriptions found in the Internet wild to be particularly instructive. Given the code below: =====8<------------------ from collections import namedtuple class Foo(): Dimensions = namedtuple('Dimensions', ['height', 'width']) _dimensions = Dimensions(3, 4) def dimensions(): print('id = {}'.format(id(Foo._dimensions))) return Foo._dimensions @staticmethod def dimensions1(): print('id = {}'.format(id(_dimensions))) return _dimensions =====8<------------------ The class method Foo.dimensions() is capable of accessing class members, but Foo.dimensions1() cannot. What does the @staticmethod decorator really add? Thanks! From __peter__ at web.de Mon Aug 12 04:10:24 2019 From: __peter__ at web.de (Peter Otten) Date: Mon, 12 Aug 2019 10:10:24 +0200 Subject: [Tutor] class functions/staticmethod? References: Message-ID: James Hartley wrote: > I am lacking in understanding of the @staticmethod property. > Explanation(s)/links might be helpful. I have not found the descriptions > found in the Internet wild to be particularly instructive. Given the code > below: > =====8<------------------ > from collections import namedtuple > > class Foo(): > Dimensions = namedtuple('Dimensions', ['height', 'width']) > _dimensions = Dimensions(3, 4) > > def dimensions(): > print('id = {}'.format(id(Foo._dimensions))) > return Foo._dimensions That works with the class as Foo.dimensions is just a function in Python 3, but not with an instance because Python will try to pass the instance as the first argument >>> Foo.dimensions() id = 140192821560880 Dimensions(height=3, width=4) >>> Foo().dimensions() Traceback (most recent call last): File "", line 1, in TypeError: dimensions() takes 0 positional arguments but 1 was given You can turn it into a static method @staticmethod def dimensions(): print('id = {}'.format(id(Foo._dimensions))) return Foo._dimensions >>> Foo.dimensions() id = 139629779179056 Dimensions(height=3, width=4) >>> Foo().dimensions() id = 139629779179056 Dimensions(height=3, width=4) or, when you are planning for subclases, into a classmethod: $ cat staticmethod_demo.py class Foo(): _dimensions = "foo-dimensions" @classmethod def class_dimensions(cls): return cls._dimensions @staticmethod def static_dimensions(): return Foo._dimensions class Bar(Foo): _dimensions = "bar-dimensions" $ python3 -i staticmethod_demo.py >>> Foo.class_dimensions(), Foo.static_dimensions() ('foo-dimensions', 'foo-dimensions') >>> Bar.class_dimensions(), Bar.static_dimensions() ('bar-dimensions', 'foo-dimensions') > > @staticmethod > def dimensions1(): > print('id = {}'.format(id(_dimensions))) > return _dimensions > =====8<------------------ > The class method Foo.dimensions() is capable of accessing class members, > but Foo.dimensions1() cannot. What does the @staticmethod decorator really > add? You do not really need static methods; they work like module-level functions. They are more of a means to organize your code; by writing class Foo: @staticmethod def bar(...): do stuff instead of def foo_bar(...): do stuff class Foo: pass you make the mental association between the class and the function a bit stronger. From steve at pearwood.info Mon Aug 12 04:34:22 2019 From: steve at pearwood.info (Steven D'Aprano) Date: Mon, 12 Aug 2019 18:34:22 +1000 Subject: [Tutor] class functions/staticmethod? In-Reply-To: References: Message-ID: <20190812083421.GD16011@ando.pearwood.info> On Sun, Aug 11, 2019 at 10:58:37PM -0500, James Hartley wrote: > I am lacking in understanding of the @staticmethod property. > Explanation(s)/links might be helpful. I have not found the descriptions > found in the Internet wild to be particularly instructive. Given the code > below: [...] > The class method Foo.dimensions() is capable of accessing class members, > but Foo.dimensions1() cannot. What does the @staticmethod decorator really > add? Very little. To understand staticmethod in Python, you have to understand what ordinary methods do. When you make a class with a method: class MyClass(object): def spam(self): print(self) the interpreter creates a plain old regular function called "spam", and attaches it to MyClass. It is precisely the same as doing this: def spam(self): print(self) class MyClass(object): pass MyClass.spam = spam except more convenient. Methods are actually regular functions under the hood. But when you access a method, like this: instance = MyClass() instance.spam() # call the method the interpreter does some runtime magic to convert the function object into a method object which automatically knows what "self" is. This magic is called "the descriptor protocol", it's very clever but advanced programming, and the details aren't important here. So just think of it like this: When you access instance.spam, the interpreter converts the plain old dumb function object which has no idea what "self" is into a magical method object which does. If you bypass the descriptor "magic", you can grab hold of the plain-old regular function: py> instance = MyClass() py> vars(type(instance))['spam'] # Bypass all the magic. but it's dumb, and doesn't know what "self" is: py> vars(type(instance))['spam']() Traceback (most recent call last): File "", line 1, in TypeError: spam() missing 1 required positional argument: 'self' If you use normal attribute access, the function is turned into a method object that knows what "self" should be: py> instance.spam # Normal access. > py> instance.spam() # "self" is automatically provided <__main__.MyClass object at 0xb77e52ac> So that's how methods work normally. But what if you don't want a method that understands "self", but a regular dumb-old function, but for some reason it needs to be attached to a class? You can't use a regular function in the class body, because it will be automatically turned into a method on access, and for some reason you don't want that. You need a way to tell the interpreter "Don't convert this into a method with self, leave it as a regular function", and staticmethod is that way. (To be pedantic, it doesn't actually leave it as a regular function, it converts it to a staticmethod object which behaves like a regular function. But that's a difference which normally makes no difference.) So you can see, the niche for staticmethod is very, very narrow. You need something that is attached to a class, which you can call like a method, but you don't want it to receive "self" as the automatic first argument. That's pretty rare. For a very long time, the only known use for staticmethod was in the tests checking that the staticmethod code worked correctly. So that's what staticmethod does. It is occassionally useful, but not very often. Chances are, if you think you need one, you probably don't. So why doesn't it work the way you expect? For that, read my next email. -- Steven From steve at pearwood.info Mon Aug 12 04:50:07 2019 From: steve at pearwood.info (Steven D'Aprano) Date: Mon, 12 Aug 2019 18:50:07 +1000 Subject: [Tutor] class functions/staticmethod? In-Reply-To: References: Message-ID: <20190812085007.GE16011@ando.pearwood.info> Part Two. On Sun, Aug 11, 2019 at 10:58:37PM -0500, James Hartley wrote: > from collections import namedtuple > > class Foo(): > Dimensions = namedtuple('Dimensions', ['height', 'width']) > _dimensions = Dimensions(3, 4) > > def dimensions(): > print('id = {}'.format(id(Foo._dimensions))) > return Foo._dimensions > > @staticmethod > def dimensions1(): > print('id = {}'.format(id(_dimensions))) > return _dimensions > The class method Foo.dimensions() is capable of accessing class members, Foo.dimensions is *not* a class method; it is a regular method that is written badly, and only works by accident. It *seems* to be okay because when you try it like this: Foo.dimensions() # call directly from the class object you bypass some of the method magic, and get access to the regular function object, which in turn does a global lookup by name to find "Foo" and everything works from that point (although a bit slower than necessary). But it doesn't work properly, because if you try to use it like this: Foo().dimensions() # call from an instance you'll get an error that the method takes no arguments but one is supplied. To fix this, we can make it a proper classmethod like this: class Foo(): Dimensions = namedtuple('Dimensions', ['height', 'width']) _dimensions = Dimensions(3, 4) @classmethod def dimensions(cls): print('id = {}'.format(id(cls._dimensions))) return cls._dimensions and now both Foo.dimensions() and Foo().dimensions() will work correctly, and as a bonus it ought to be a little faster. Part 3 to follow. -- Steven From steve at pearwood.info Mon Aug 12 05:26:26 2019 From: steve at pearwood.info (Steven D'Aprano) Date: Mon, 12 Aug 2019 19:26:26 +1000 Subject: [Tutor] class functions/staticmethod? In-Reply-To: References: Message-ID: <20190812092626.GF16011@ando.pearwood.info> Part 3. On Sun, Aug 11, 2019 at 10:58:37PM -0500, James Hartley wrote: > from collections import namedtuple > > class Foo(): > Dimensions = namedtuple('Dimensions', ['height', 'width']) > _dimensions = Dimensions(3, 4) > > def dimensions(): > print('id = {}'.format(id(Foo._dimensions))) > return Foo._dimensions > > @staticmethod > def dimensions1(): > print('id = {}'.format(id(_dimensions))) > return _dimensions In part 2, I explained that we can re-write the dimensions() method to work correctly using the @classmethod decorator: @classmethod def dimensions(cls): print('id = {}'.format(id(cls._dimensions))) return cls._dimensions Another benefit of doing this is that it will now work correctly in subclasses. class Bar(Foo): # inherit from Foo _dimensions = (3, 4, 5, 6) # Override the parent's "dimensions". Using your definition, Bar.dimensions() will return Foo._dimensions instead of Bar._dimensions. But using the classmethod version works as expected. So why doesn't the staticmethod version work correctly? Its all to do with the way variable names are resolved by the interpreter. If you are used to Java, for example, you might expect that "class variables" (what Python calls "class attributes") are part of the scope for methods: spam = 999 # Global variable spam. class MyClass(object): spam = 1 # Class attribute ("variable") spam. def method(self): return spam instance = MyClass() If you are used to Java's rules, you would expect that instance.method() will return 1, but in Python it returns the global spam, 999. To simplify a little, the scoping rules for Python are described by the LEGB rule: - Local variables have highest priority; - followed by variables in the Enclosing function scope (if any); - followed by Global variables; - and lastly Builtins (like `len()`, `zip()`, etc). Notice that the surrounding class isn't included.[1] To access either instance attributes or class attributes, you have to explicitly say so: def method(self): return self.spam This is deliberate, and a FAQ: https://docs.python.org/3/faq/design.html#why-must-self-be-used-explicitly-in-method-definitions-and-calls Using Java's scoping rules, the staticmethod would have worked: @staticmethod def dimensions1(): print('id = {}'.format(id(_dimensions))) return _dimensions because it would see the _dimensions variable in the class scope. But Python doesn't work that way. You would have to grab hold of the class from the global scope, then grab dimensions: @staticmethod def dimensions1(): _dimensions = Foo._dimensions print('id = {}'.format(id(_dimensions))) return _dimensions If you are coming from a Java background, you may have been fooled by an unfortunate clash in terminology. A "static method" in Java is closer to a *classmethod* in Python, not a staticmethod. The main difference being that in Java, class variables (attributes) are automatically in scope; in Python you have to access them through the "cls" parameter. -- Steven From mrusso11 at u.rochester.edu Mon Aug 12 12:54:51 2019 From: mrusso11 at u.rochester.edu (Marissa Russo) Date: Mon, 12 Aug 2019 12:54:51 -0400 Subject: [Tutor] HELP PLEASE Message-ID: <70327CEB-2556-43A6-903E-CFA3385186BA@u.rochester.edu> Hello, I am trying to figure out what is going on and why my output is saying ?? instead of giving me a number. Please let me know if you see the error in my code!! import math def get_numbers(): print("This program will compute the mean and standard deviation") file1 = input("Please enter the first filename: ") file2 = input("Please enter the second filename: ") x = open(file1, "r") y = open(file2, "r") nums = x.readlines() nums2 = y.readlines() return nums, nums2 def mean(nums): for num in nums: _sum += num return _sum / len(nums) def mean2(nums2): for num in nums2: _sum += nums2 return _sum / len(nums2) def main(): data = get_numbers() print("The mean of the first file is: ", mean) print("The mean of the second file is: ", mean2) main() From joel.goldstick at gmail.com Mon Aug 12 13:33:53 2019 From: joel.goldstick at gmail.com (Joel Goldstick) Date: Mon, 12 Aug 2019 13:33:53 -0400 Subject: [Tutor] HELP PLEASE In-Reply-To: <70327CEB-2556-43A6-903E-CFA3385186BA@u.rochester.edu> References: <70327CEB-2556-43A6-903E-CFA3385186BA@u.rochester.edu> Message-ID: On Mon, Aug 12, 2019 at 1:22 PM Marissa Russo wrote: > > Hello, > > I am trying to figure out what is going on and why my output is saying ?? instead of giving me a number. Please let me know if you see the error in my code!! > Marissa, you have lots of problems here. First, you should copy and paste the complete traceback instead of the snippet you showed. > import math > > def get_numbers(): > print("This program will compute the mean and standard deviation") > file1 = input("Please enter the first filename: ") > file2 = input("Please enter the second filename: ") > x = open(file1, "r") > y = open(file2, "r") > nums = x.readlines() > nums2 = y.readlines() > > return nums, nums2 > Above. You are returning a string of all the data in your files.. is that what you want? > def mean(nums): > for num in nums: > _sum += num > return _sum / len(nums) > Your traceback probably is complaining about _sum +=. You can't add to a variable that doesn't exists. Maybe try _sum = 0 above your for loop > def mean2(nums2): > for num in nums2: > _sum += nums2 > return _sum / len(nums2) > > def main(): > data = get_numbers() Ok, so you call a function which will return a tuple with two values into data. But you don't do anything with data You might put this here: m = mean(data[0]) m2 = mean2(data[1]) then print m and m2 > > print("The mean of the first file is: ", mean) > print("The mean of the second file is: ", mean2) > main() > So, first, show the complete error message here. > _______________________________________________ > Tutor maillist - Tutor at python.org > To unsubscribe or change subscription options: > https://mail.python.org/mailman/listinfo/tutor -- Joel Goldstick http://joelgoldstick.com/blog http://cc-baseballstats.info/stats/birthdays From zebra05 at gmail.com Mon Aug 12 13:36:29 2019 From: zebra05 at gmail.com (Sithembewena L. Dube) Date: Mon, 12 Aug 2019 19:36:29 +0200 Subject: [Tutor] HELP PLEASE In-Reply-To: <70327CEB-2556-43A6-903E-CFA3385186BA@u.rochester.edu> References: <70327CEB-2556-43A6-903E-CFA3385186BA@u.rochester.edu> Message-ID: In your calls to the `*print*` function, you are not calling the `*mean*` and `*mean2*` functions that you declared to calculate averages. So Python sees you trying to concatenate two function objects to strings and is not happy. That's one thing. Secondly, your code could be refactored to define one `*mean*` function as your functions do virtually the same thing. Then, you could just call it as needed. Thirdly, you could use the `*with*` keyword. See "7.2. Reading and Writing Files" at https://docs.python.org/3/tutorial/inputoutput.html Kind regards, Sithembewena Dube *Sent with Shift * On Mon, Aug 12, 2019 at 7:24 PM Marissa Russo wrote: > Hello, > > I am trying to figure out what is going on and why my output is saying > ?? instead of giving me a number. Please let me know > if you see the error in my code!! > > import math > > def get_numbers(): > print("This program will compute the mean and standard deviation") > file1 = input("Please enter the first filename: ") > file2 = input("Please enter the second filename: ") > x = open(file1, "r") > y = open(file2, "r") > nums = x.readlines() > nums2 = y.readlines() > > return nums, nums2 > > def mean(nums): > for num in nums: > _sum += num > return _sum / len(nums) > > def mean2(nums2): > for num in nums2: > _sum += nums2 > return _sum / len(nums2) > > def main(): > data = get_numbers() > > print("The mean of the first file is: ", mean) > print("The mean of the second file is: ", mean2) > main() > > _______________________________________________ > Tutor maillist - Tutor at python.org > To unsubscribe or change subscription options: > https://mail.python.org/mailman/listinfo/tutor > From alan.gauld at yahoo.co.uk Mon Aug 12 13:48:15 2019 From: alan.gauld at yahoo.co.uk (Alan Gauld) Date: Mon, 12 Aug 2019 18:48:15 +0100 Subject: [Tutor] HELP PLEASE In-Reply-To: <70327CEB-2556-43A6-903E-CFA3385186BA@u.rochester.edu> References: <70327CEB-2556-43A6-903E-CFA3385186BA@u.rochester.edu> Message-ID: On 12/08/2019 17:54, Marissa Russo wrote: > def mean(nums): > for num in nums: > _sum += num > return _sum / len(nums) > > def mean2(nums2): > for num in nums2: > _sum += nums2 > return _sum / len(nums2) > > def main(): > data = get_numbers() > > print("The mean of the first file is: ", mean) > print("The mean of the second file is: ", mean2) Notice that in the print statement you use the names of the functions. Python therefore evaluates those names and discovers that they are functions, so that's what it tells you. To get the values you need to call the functions, which you do by adding parens to the name: print("The mean of the first file is: ", mean(data[0]) ) print("The mean of the second file is: ", mean2(data[1]) ) That will then execute the functions.... Which leads us to the next problem. In both functions you have a line like: _sum += num But that expands to _sum = _sum + num Which means you are trying to get a value from _sum before assigning any value. You need to initialize _sum before using it like that. _sum = 0 But better still would be to use the builtin sum method: sum(nums) So your mean function turns into: def mean(nums): return( sum(nums)/len(nums)) But that leads to the next problem which is that your data is still in string format, which is what you read from the file with getlines(). You can convert it to integers using a list comprehension inside your get_numbers function: nums = [int(s) for s in nums] which assumes the file is a list of numbers each on one line? If you are not familiar with the list comprehension shortcut you can do it longhand like this: num_copy = [] for num in nums: num_copy.append(int(num)) nums = num_copy Incidentally, the two mean functions look identical to me. What do you think is different other than the names? Finally, you could just use the mean() function defined in the statistics library of the standard library. import statistics as stats ... print("The mean of the first file is: ", stats.mean(data[0]) ) ... That should be enough to be getting on with. Once you get those things done you could post again and we might suggest some ways to tidy the code up a little. -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos From mats at wichmann.us Mon Aug 12 13:51:50 2019 From: mats at wichmann.us (Mats Wichmann) Date: Mon, 12 Aug 2019 11:51:50 -0600 Subject: [Tutor] HELP PLEASE In-Reply-To: <70327CEB-2556-43A6-903E-CFA3385186BA@u.rochester.edu> References: <70327CEB-2556-43A6-903E-CFA3385186BA@u.rochester.edu> Message-ID: On 8/12/19 10:54 AM, Marissa Russo wrote: > Hello, > > I am trying to figure out what is going on and why my output is saying ?? instead of giving me a number. Please let me know if you see the error in my code!! to quickly illustrate the specific question you asked - you got comments on other stuff already: >>> def foo(): ... return "string from foo()" ... >>> print(foo) >>> print(foo()) string from foo() >>> From jf_byrnes at comcast.net Mon Aug 12 16:50:17 2019 From: jf_byrnes at comcast.net (Jim) Date: Mon, 12 Aug 2019 15:50:17 -0500 Subject: [Tutor] Union Message-ID: <7ed905a4-e3cf-2372-d3d1-90253aa1e18e@comcast.net> I was reading the docs for PySimpbleGUI here: https://pysimplegui.readthedocs.io/en/latest/#building-custom-windows In the table of parameters for the Window() function for example the icon parameter the meaning is Union[str, str] Can be either a filename or Base64 value. What is the usage of "Union". I don't recall seeing anything like it before. Thanks, Jim From mats at wichmann.us Mon Aug 12 17:12:24 2019 From: mats at wichmann.us (Mats Wichmann) Date: Mon, 12 Aug 2019 15:12:24 -0600 Subject: [Tutor] Union In-Reply-To: <7ed905a4-e3cf-2372-d3d1-90253aa1e18e@comcast.net> References: <7ed905a4-e3cf-2372-d3d1-90253aa1e18e@comcast.net> Message-ID: On 8/12/19 2:50 PM, Jim wrote: > I was reading the docs for PySimpbleGUI here: > https://pysimplegui.readthedocs.io/en/latest/#building-custom-windows > > In the table of parameters for the Window() function for example the > icon parameter the meaning is? Union[str, str] Can be either a filename > or Base64 value. > > What is the usage of "Union". I don't recall seeing anything like it > before. it's type annotation. Search here: https://docs.python.org/3/library/typing.html From jf_byrnes at comcast.net Mon Aug 12 17:56:10 2019 From: jf_byrnes at comcast.net (Jim) Date: Mon, 12 Aug 2019 16:56:10 -0500 Subject: [Tutor] Union In-Reply-To: References: <7ed905a4-e3cf-2372-d3d1-90253aa1e18e@comcast.net> Message-ID: On 8/12/19 4:12 PM, Mats Wichmann wrote: > On 8/12/19 2:50 PM, Jim wrote: >> I was reading the docs for PySimpbleGUI here: >> https://pysimplegui.readthedocs.io/en/latest/#building-custom-windows >> >> In the table of parameters for the Window() function for example the >> icon parameter the meaning is? Union[str, str] Can be either a filename >> or Base64 value. >> >> What is the usage of "Union". I don't recall seeing anything like it >> before. > > it's type annotation. Search here: > > https://docs.python.org/3/library/typing.html > OK, thanks. Jim From alan.gauld at yahoo.co.uk Mon Aug 12 14:35:40 2019 From: alan.gauld at yahoo.co.uk (Alan Gauld) Date: Mon, 12 Aug 2019 19:35:40 +0100 Subject: [Tutor] Fwd: Re: HELP PLEASE In-Reply-To: References: Message-ID: Forwarding to tutorblist for info... -------- Forwarded Message -------- Subject: Re: [Tutor] HELP PLEASE Date: Mon, 12 Aug 2019 19:34:48 +0100 From: Alan Gauld Reply-To: alan.gauld at yahoo.co.uk To: Marissa Russo On 12/08/2019 19:17, Marissa Russo wrote: > I fixed some things up??? OK, But please use ReplyAll when responding to list mails otherwise it just comes to me (or whoever posted) instead of the whole list. (And I might be busy. at the time..) > import math > > def get_numbers(): > print("This program will compute the mean and standard deviation") > file1 = input("Please enter the first filename: ") > file2 = input("Please enter the second filename: ") > x = open(file1, "r") > y = open(file2, "r") > nums = x.readlines() > nums2 = y.readlines() > > num_copy = [] > for num in nums: > num_copy.append(float(num)) > nums = num_copy > > return nums You are only returning one list of numbers. you need to convert nums2 as well and then return both. To save some typing convert the?? int conversion loop into a function: def?? to_ints(strings): ?????? num_copy = [] ?????? for num in nums: ???????????????? num_copy.append(float(num)) ?????? return num_copy then call that on both list of strings. ???????????????? return to_ints(nums), to_ints(nums2) > def mean(): > _sum = 0 > return(sum(nums)/len(nums)) Notice you don't pass any values to mean so you are relying on the function seeing the values of nums outside the function somewhere. It is beter where you passs in the values as you did originally: def mean(numbers):.... > def main(): > data = get_numbers() > m = mean(data[0]) > m2 = mean2(data[1]) You call mean2() but don't have a mean2() function anymore. You only need mean() so call it both times but with different input data. > print("The mean of the first file is: ", m) > print("The mean of the second file is: ", m2) > main() > > This is now the output error: > Traceback (most recent call last): > File "/Applications/Python 3.7/exercises .py", line 34, in > main() > File "/Applications/Python 3.7/exercises .py", line 30, in main > m = mean(data[0]) > TypeError: mean() takes 0 positional arguments but 1 was given See the comment above. You removed the input parameter to the mean() function. But then you call it as if it was still there. You must be consistent between your function definitions and function calls.. You need to start thinking like the interpreter as you walk through the code. Think about what it knows at any given point and how the various functions communicate?? - usually by storing intermediate results in variables. (Many find it convenient to jot down the variables and their values as they walk through the code, updating the values as they go). So check what those variables contain - using print statements to debug it if necessary. -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos From mrusso11 at u.rochester.edu Mon Aug 12 15:11:56 2019 From: mrusso11 at u.rochester.edu (Marissa Russo) Date: Mon, 12 Aug 2019 15:11:56 -0400 Subject: [Tutor] HELP PLEASE In-Reply-To: <70327CEB-2556-43A6-903E-CFA3385186BA@u.rochester.edu> References: <70327CEB-2556-43A6-903E-CFA3385186BA@u.rochester.edu> Message-ID: <7574F8DD-DBE1-4CC4-8F25-B0C08DA58EEC@u.rochester.edu> This is my code: import math def get_numbers(): print("This program will compute the mean and standard deviation") file1 = input("Please enter the first filename: ") file2 = input("Please enter the second filename: ") x = open(file1, "r") y = open(file2, "r") nums = x.readlines() nums2 = y.readlines() return nums, nums2 def to_ints(strings): num_copy = [] for num in nums: num_copy.append(float(num)) return num_copy return to_ints(nums), to_ints(nums2) def mean(nums): _sum = 0 return(sum(nums)/len(nums)) def main(): data = get_numbers() m = mean(data[0]) m2 = mean(data[1]) print("The mean of the first file is: ", m) print("The mean of the second file is: ", m2) main() This is the output of my updated code: Traceback (most recent call last): File "/Applications/Python 3.7/exercises .py", line 37, in main() File "/Applications/Python 3.7/exercises .py", line 33, in main m = mean(data[0]) File "/Applications/Python 3.7/exercises .py", line 29, in mean return(sum(nums)/len(nums)) TypeError: unsupported operand type(s) for +: 'int' and 'str' > On Aug 12, 2019, at 12:54 PM, Marissa Russo wrote: > > Hello, > > I am trying to figure out what is going on and why my output is saying ?? instead of giving me a number. Please let me know if you see the error in my code!! > > import math > > def get_numbers(): > print("This program will compute the mean and standard deviation") > file1 = input("Please enter the first filename: ") > file2 = input("Please enter the second filename: ") > x = open(file1, "r") > y = open(file2, "r") > nums = x.readlines() > nums2 = y.readlines() > > return nums, nums2 > > def mean(nums): > for num in nums: > _sum += num > return _sum / len(nums) > > def mean2(nums2): > for num in nums2: > _sum += nums2 > return _sum / len(nums2) > > def main(): > data = get_numbers() > > print("The mean of the first file is: ", mean) > print("The mean of the second file is: ", mean2) > main() > From rmlibre at riseup.net Mon Aug 12 18:11:27 2019 From: rmlibre at riseup.net (rmlibre at riseup.net) Date: Mon, 12 Aug 2019 15:11:27 -0700 Subject: [Tutor] cgi module help Message-ID: <9fd229ee9247c53c75c75868f7abb06f@riseup.net> I have a question about the cgi module. I'm trying to retrieve post data as a nested dictionary from client code. For instance: """client code""" from requests import sessions from datetime import datetime session = sessions.Session() date = str(datetime.now()) msg_id = 0001 message = {"metadata": {"date": date, "id": msg_id}} session.post(data=message) """server cgi script""" import cgi form = cgi.FieldStorage() metadata = form["metadata"] print(metadata) >>> ["date", "id"] for item in form.list: print(f"{item}\n{item.name}\n{item.value}\n") >>> MiniFieldStorage('metadata', 'date') >>> metadata >>> date >>> >>> MiniFieldStorage('metadata', 'id') >>> metadata >>> id >>> My issue is the FieldStorage class doesn't seem to store the values within metadata, it only stores the key of each element within the nested dictionary. And it constructs MiniFieldStorage objects with attributes such as .name == "metadata" and .value == "date". But I need the actual values, not just the name of the element. Any idea how I can maintain this nested structure and retrieve the data within a nested dictionary in an elegant way? Constraints: For simplicity, I omitted the actual payload which is also a nested dictionary that goes two levels deep. I'm searching for a solution that's extensible enough to include such fields as well. From alan.gauld at yahoo.co.uk Mon Aug 12 20:25:27 2019 From: alan.gauld at yahoo.co.uk (Alan Gauld) Date: Tue, 13 Aug 2019 01:25:27 +0100 Subject: [Tutor] Fwd: Re: HELP PLEASE In-Reply-To: References: Message-ID: On 12/08/2019 19:35, Alan Gauld via Tutor wrote: > To save some typing convert the?? int conversion loop into a function: > > > def?? to_ints(strings): > ?????? num_copy = [] > ?????? for num in nums: > ???????????????? num_copy.append(float(num)) > > ?????? return num_copy # No idea where all the ? came from, however I made a bad error in that code... It should read: def to_ints(strings): num_copy = [] for num in strings: # strings not nums! num_copy.append(float(num)) return num_copy Apologies. -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos From PyTutor at DancesWithMice.info Tue Aug 13 05:02:26 2019 From: PyTutor at DancesWithMice.info (David L Neil) Date: Tue, 13 Aug 2019 21:02:26 +1200 Subject: [Tutor] HELP PLEASE In-Reply-To: <7574F8DD-DBE1-4CC4-8F25-B0C08DA58EEC@u.rochester.edu> References: <70327CEB-2556-43A6-903E-CFA3385186BA@u.rochester.edu> <7574F8DD-DBE1-4CC4-8F25-B0C08DA58EEC@u.rochester.edu> Message-ID: <191d8e64-5426-b48f-1a2d-48b9f12ac70d@DancesWithMice.info> On 13/08/19 7:11 AM, Marissa Russo wrote: > This is my code: > > import math > > def get_numbers(): > print("This program will compute the mean and standard deviation") > file1 = input("Please enter the first filename: ") > file2 = input("Please enter the second filename: ") > x = open(file1, "r") > y = open(file2, "r") > nums = x.readlines() > nums2 = y.readlines() > > return nums, nums2 Do you understand the concept of a "loop" - Code which is repeated as many times as necessary? How many files must be opened, read, and then averaged? > def to_ints(strings): > num_copy = [] > for num in nums: > num_copy.append(float(num)) > return num_copy > > return to_ints(nums), to_ints(nums2) What is the purpose of this line, given that the previous line has returned to the calling code? Have I missed something? When is to_ints() used? > def mean(nums): > _sum = 0 > return(sum(nums)/len(nums)) > > def main(): > data = get_numbers() > m = mean(data[0]) Do you know what data[ 0 ] (or [ 1 ]) contains? Might this knowledge be helpful? > m2 = mean(data[1]) > print("The mean of the first file is: ", m) > print("The mean of the second file is: ", m2) > main() > > > This is the output of my updated code: > > Traceback (most recent call last): > File "/Applications/Python 3.7/exercises .py", line 37, in > main() > File "/Applications/Python 3.7/exercises .py", line 33, in main > m = mean(data[0]) > File "/Applications/Python 3.7/exercises .py", line 29, in mean > return(sum(nums)/len(nums)) > TypeError: unsupported operand type(s) for +: 'int' and 'str' What do you think "TypeError" means? Do you know the difference between an "int" and a "str[ing]"? Given that both sum() and len() return numbers, what do you think is the "str"? Might this refer back to the earlier suggestion that you need to 'see' the data being read? -- Regards =dn From cs at cskk.id.au Tue Aug 13 06:44:11 2019 From: cs at cskk.id.au (Cameron Simpson) Date: Tue, 13 Aug 2019 20:44:11 +1000 Subject: [Tutor] HELP PLEASE In-Reply-To: <7574F8DD-DBE1-4CC4-8F25-B0C08DA58EEC@u.rochester.edu> References: <7574F8DD-DBE1-4CC4-8F25-B0C08DA58EEC@u.rochester.edu> Message-ID: <20190813104411.GA81015@cskk.homeip.net> On 12Aug2019 15:11, Marissa Russo wrote: >This is my code: Thank you. >This is the output of my updated code: >Traceback (most recent call last): > File "/Applications/Python 3.7/exercises .py", line 37, in > main() > File "/Applications/Python 3.7/exercises .py", line 33, in main > m = mean(data[0]) > File "/Applications/Python 3.7/exercises .py", line 29, in mean > return(sum(nums)/len(nums)) >TypeError: unsupported operand type(s) for +: 'int' and 'str' Thank you for this as well, it makes things much clearer. So, to your code: >import math Just a remark: you're not using anything from this module. I presume you intend to later. >def get_numbers(): > print("This program will compute the mean and standard deviation") > file1 = input("Please enter the first filename: ") > file2 = input("Please enter the second filename: ") > x = open(file1, "r") > y = open(file2, "r") > nums = x.readlines() > nums2 = y.readlines() As has been mentioned in another reply, readlines() returns a list of strings, one for each line of text in the file. In order to treat these as numbers you need to convert them. > return nums, nums2 > >def to_ints(strings): > num_copy = [] > for num in nums: > num_copy.append(float(num)) > return num_copy This returns a list of floats. You might want to rename this function to "to_floats". Just for clarity. > return to_ints(nums), to_ints(nums2) This isn't reached. I _think_ you need to put this line at the bottom of the get_numbers function in order to return two lists of numbers. But it is down here, not up there. >def mean(nums): > _sum = 0 > return(sum(nums)/len(nums)) This is the line raising your exception. The reference to "+" is because sum() does addition. It starts with 0 and adds the values you give it, but you're handing it "nums". Presently "nums" is a list of strings, thus the addition of the initial 0 to a str in the exception message. If you move your misplaced "return to_ints(nums), to_ints(nums2)" statement up into the get_numbers function you should be better off, because then it will return a list of numbers, not strings. Cheers, Cameron Simpson From zebra05 at gmail.com Tue Aug 13 07:09:07 2019 From: zebra05 at gmail.com (Sithembewena L. Dube) Date: Tue, 13 Aug 2019 13:09:07 +0200 Subject: [Tutor] HELP PLEASE In-Reply-To: <20190813104411.GA81015@cskk.homeip.net> References: <7574F8DD-DBE1-4CC4-8F25-B0C08DA58EEC@u.rochester.edu> <20190813104411.GA81015@cskk.homeip.net> Message-ID: Hi Marissa, I really think that you could consider doing an introductory Python tutorial and then venture back into solving this problem. Understanding concepts like data types, function syntax and loops makes all the difference in approaching programming challenges. Here is a decent and free online Python tutorial to get you going: https://www.learnpython.org/ Kind regards, Sithembewena Dube *Sent with Shift * On Tue, Aug 13, 2019 at 12:47 PM Cameron Simpson wrote: > On 12Aug2019 15:11, Marissa Russo wrote: > >This is my code: > > Thank you. > > >This is the output of my updated code: > >Traceback (most recent call last): > > File "/Applications/Python 3.7/exercises .py", line 37, in > > main() > > File "/Applications/Python 3.7/exercises .py", line 33, in main > > m = mean(data[0]) > > File "/Applications/Python 3.7/exercises .py", line 29, in mean > > return(sum(nums)/len(nums)) > >TypeError: unsupported operand type(s) for +: 'int' and 'str' > > Thank you for this as well, it makes things much clearer. > > So, to your code: > > >import math > > Just a remark: you're not using anything from this module. I presume you > intend to later. > > >def get_numbers(): > > print("This program will compute the mean and standard deviation") > > file1 = input("Please enter the first filename: ") > > file2 = input("Please enter the second filename: ") > > x = open(file1, "r") > > y = open(file2, "r") > > nums = x.readlines() > > nums2 = y.readlines() > > As has been mentioned in another reply, readlines() returns a list of > strings, one for each line of text in the file. > > In order to treat these as numbers you need to convert them. > > > return nums, nums2 > > > >def to_ints(strings): > > num_copy = [] > > for num in nums: > > num_copy.append(float(num)) > > return num_copy > > This returns a list of floats. You might want to rename this function to > "to_floats". Just for clarity. > > > return to_ints(nums), to_ints(nums2) > > This isn't reached. I _think_ you need to put this line at the bottom of > the get_numbers function in order to return two lists of numbers. But it > is down here, not up there. > > >def mean(nums): > > _sum = 0 > > return(sum(nums)/len(nums)) > > This is the line raising your exception. The reference to "+" is because > sum() does addition. It starts with 0 and adds the values you give it, > but you're handing it "nums". > > Presently "nums" is a list of strings, thus the addition of the initial > 0 to a str in the exception message. > > If you move your misplaced "return to_ints(nums), to_ints(nums2)" > statement up into the get_numbers function you should be better off, > because then it will return a list of numbers, not strings. > > Cheers, > Cameron Simpson > _______________________________________________ > Tutor maillist - Tutor at python.org > To unsubscribe or change subscription options: > https://mail.python.org/mailman/listinfo/tutor > From alan.gauld at yahoo.co.uk Tue Aug 13 10:05:30 2019 From: alan.gauld at yahoo.co.uk (Alan Gauld) Date: Tue, 13 Aug 2019 15:05:30 +0100 Subject: [Tutor] HELP PLEASE In-Reply-To: References: <7574F8DD-DBE1-4CC4-8F25-B0C08DA58EEC@u.rochester.edu> <20190813104411.GA81015@cskk.homeip.net> Message-ID: On 13/08/2019 12:09, Sithembewena L. Dube wrote: > Hi Marissa, > > I really think that you could consider doing an introductory Python > tutorial and then venture back into solving this problem. >>> This is the output of my updated code: >>> Traceback (most recent call last): >>> File "/Applications/Python 3.7/exercises .py", line 37, in >>> main() Based on the file name I suspect she is already doing some kind of tutorial. However, you are right about needing to review some of the basic concepts. As a plug I'll just mention my own tutorial linked in my .sig below :-) -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos From __peter__ at web.de Tue Aug 13 11:49:36 2019 From: __peter__ at web.de (Peter Otten) Date: Tue, 13 Aug 2019 17:49:36 +0200 Subject: [Tutor] cgi module help References: <9fd229ee9247c53c75c75868f7abb06f@riseup.net> Message-ID: rmlibre at riseup.net wrote: > I have a question about the cgi module. > > I'm trying to retrieve post data as a nested dictionary from client > code. > > For instance: > > > > """client code""" > from requests import sessions > from datetime import datetime > > session = sessions.Session() > date = str(datetime.now()) > msg_id = 0001 > message = {"metadata": {"date": date, "id": msg_id}} > session.post(data=message) I made the above post to the server I found here https://gist.github.com/mdonkers/63e115cc0c79b4f6b8b3a6b797e485c7 and got the following output: $ python3 server.py 8080 INFO:root:Starting httpd... INFO:root:POST request, Path: / Headers: Host: localhost:8080 Content-Length: 25 Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate, compress Accept: */* User-Agent: python-requests/2.2.1 CPython/2.7.6 Linux/3.13.0-170-generic Body: metadata=date&metadata=id 127.0.0.1 - - [13/Aug/2019 17:45:35] "POST / HTTP/1.1" 200 - It looks like the data doesn't even get through. From cs at cskk.id.au Tue Aug 13 19:58:35 2019 From: cs at cskk.id.au (Cameron Simpson) Date: Wed, 14 Aug 2019 09:58:35 +1000 Subject: [Tutor] class functions/staticmethod? In-Reply-To: References: Message-ID: <20190813235835.GA20128@cskk.homeip.net> On 11Aug2019 22:58, James Hartley wrote: >I am lacking in understanding of the @staticmethod property. >Explanation(s)/links might be helpful. I have not found the descriptions >found in the Internet wild to be particularly instructive. You have received some answers; to me they seem detailed enough to be confusing. I think of things this way: what context does a method require? Not everything needs the calling instance. Here endeth the lesson. ============ All this stuff below is examples based on that criterion: Here's a trite example class: class Rectangle: def __init__(self, width, height): self.width=width self.height = height Most methods do things with self, and are thus "instance methods", the default. They automatically receive the instance used to call them as the first "self" argument. def area(self): return self.width * self.height They need "self" as their context to do their work. Some methods might not need an instance as context: perhaps they return information that is just based on the class, or they are factory methods intended to return a new instance of the class. Then you might use a @classmethod decorator to have the calling instance's class as the context. @classmethod def from_str(cls, s): width, height = parse_an_XxY_string(s) return cls(width, height) And some methods do not need the class or the instance to do something useful: @staticmethod def compute_area(width, height): return width * height and so we don't give them the instance or the class as context. Now, _why_? Instance methods are obvious enough - they exist to return values without the caller needing to know about the object internals. Class methods are less obvious. Consider that Python is a duck typed language: we try to arrange that provided an object has the right methods we can use various different types of objects with the same functions. For example: def total_area(flat_things): return sum(flat_thing.area() for flat_thing in flat_things) That will work for Rectangles and also other things with .area() methods. Area, though, is an instance method. Class methods tend to come into their own with subclassing: I particularly use them for factory methods. Supposing we have Rectangles and Ellipses, both subclasses of a FlatThing: class FlatThing: def __init__(self, width, height): self.width=width self.height = height @classmethod def from_str(cls, s): width, height = parse_an_XxY_string(s) return cls(width, height) class Rectangle(FlatThing): def area(self): return self.width * self.height class Ellipse(FlatThing): def area(self): return self.width * self.height * math.PI / 4 See that from_str? It is common to all the classes because they can all be characterised by their width and height. But I require the class for context in order to make a new object of the _correct_ class. Examples: rect = Rectangle.from_str("5x9") ellipse = Ellipse.from_str("5x9") ellispe2 = ellipse.from_str("6x7") Here we make a Rectangle, and "cls" is Rectangle when you call it this way. Then we make an Ellipse, and "cls" is Ellipse when called this way. And then we make another Ellipse from the first ellipse, so "cls" is again "Ellipse" (because "ellipse" is an Ellipse). You can see that regardless of how we call the factory function, the only context passed is the relevant class. And in the last example (an Ellipse from an existing Ellipse), the class comes from the instance used to make the call. So we can write some function which DOES NOT KNOW whether it gets Ellipses or Rectangles: def bigger_things(flat_things): return [ flat_thing.from_str( "%sx%s" % (flat_thing.width*2, flat_thing.height*2)) for flat_thing in flat_things ] Here we could pass in a mix if Rectangles or Ellipses (or anything else with a suitable from_str method) and get out a new list with a matching mix of bigger things. Finally, the static method. As Peter remarked, because a static method does not have the instance or class for context, it _could_ be written as an ordinary top level function. Usually we use a static method in order to group top level functions _related_ to a specific class together. It also helps with imports elsewhere. So consider the earlier: @staticmethod def compute_area(width, height): return width * height in the Rectangle class. We _could_ just write this as a top level function outside the class: def compute_rectangular_area(width, height): return width * height Now think about using that elsewhere: from flat_things_module import Rectangle, Ellipse, compute_rectangular_area area1 = compute_rectangular_area(5, 9) area2 = Rectangle.compute_area(5, 9) area3 = Ellipse.compute_area(5, 9) I would rather use the forms of "area2" and "area3" because it is clear that I'm getting an area function from a nicely named class. (Also, I wouldn't have to import the area function explicitly - it comes along with the class nicely.) So the static method is used to associate it with the class it supports, for use when the caller doesn't have an instance to hand. Cheers, Cameron Simpson From steve at pearwood.info Tue Aug 13 21:15:01 2019 From: steve at pearwood.info (Steven D'Aprano) Date: Wed, 14 Aug 2019 11:15:01 +1000 Subject: [Tutor] class functions/staticmethod? In-Reply-To: <20190813235835.GA20128@cskk.homeip.net> References: <20190813235835.GA20128@cskk.homeip.net> Message-ID: <20190814011501.GJ16011@ando.pearwood.info> On Wed, Aug 14, 2019 at 09:58:35AM +1000, Cameron Simpson wrote: > On 11Aug2019 22:58, James Hartley wrote: > >I am lacking in understanding of the @staticmethod property. > >Explanation(s)/links might be helpful. I have not found the descriptions > >found in the Internet wild to be particularly instructive. > > You have received some answers; to me they seem detailed enough to be > confusing. Its only confusing if you don't work your way through it carefully and systematically. There's a lot to understand, but if you don't understand it, Python's behaviour in this case seems counter-intuitive and hard to follow. Python makes the behaviour of regular instance methods so simple and intuitive, it can be quite a blow when you try to do something that isn't. > I think of things this way: what context does a method require? Not > everything needs the calling instance. > > Here endeth the lesson. Given that you go on to write almost another 150 lines of explanation, I think a better description would be "Here *begins* the lesson" *wink* Your lesson, I think, assumes that it is obvious that staticmethods don't have access to the calling instance, or its class. But if you look at James' code, I think you will agree that he's assuming that staticmethods *do* have access to the calling class, and is perplexed by the fact that the look-up of class variables (class attributes) fails. If James comes from a Java background, he's probably assuming that static methods do have access to the class variables, using undotted names: class K(object): attr = 1 @staticmethod def foo(): return attr In Java, K.foo() would return 1. Your lesson gives us no clue why James' first method, "dimensions()", which he describes as a "class method", isn't a class method and doesn't actually work correctly, even though it appears to at first glance. -- Steven From cs at cskk.id.au Tue Aug 13 21:38:53 2019 From: cs at cskk.id.au (Cameron Simpson) Date: Wed, 14 Aug 2019 11:38:53 +1000 Subject: [Tutor] class functions/staticmethod? In-Reply-To: <20190814011501.GJ16011@ando.pearwood.info> References: <20190814011501.GJ16011@ando.pearwood.info> Message-ID: <20190814013853.GA18332@cskk.homeip.net> On 14Aug2019 11:15, Steven D'Aprano wrote: >On Wed, Aug 14, 2019 at 09:58:35AM +1000, Cameron Simpson wrote: >> On 11Aug2019 22:58, James Hartley wrote: >> >I am lacking in understanding of the @staticmethod property. >> >Explanation(s)/links might be helpful. I have not found the descriptions >> >found in the Internet wild to be particularly instructive. >> >> You have received some answers; to me they seem detailed enough to be >> confusing. > >Its only confusing if you don't work your way through it carefully and >systematically. There's a lot to understand, but if you don't understand >it, Python's behaviour in this case seems counter-intuitive and hard to >follow. Yeah, but it helps to understand the objective: function context. A deep dive into the mechanisms used to achieve that is a load to ingest. High levels of detail tend to swamp one's view of the larger picture, particularly when learning. [...] >> I think of things this way: what context does a method require? Not >> everything needs the calling instance. >> >> Here endeth the lesson. > >Given that you go on to write almost another 150 lines of explanation, I >think a better description would be "Here *begins* the lesson" *wink* Well, maybe, but I really wanted to highlight the objective: @classmethod and @staticmethod dictate the context provided to the method. All the examples that follow aim, however vaguely, to show those contexts in action. >Your lesson, I think, assumes that it is obvious that staticmethods >don't have access to the calling instance, or its class. No, it aims to make that point clear. EVerything else is example or mechanism. >But if you look >at James' code, I think you will agree that he's assuming that >staticmethods *do* have access to the calling class, and is perplexed by >the fact that the look-up of class variables (class attributes) fails. Because nobody had said that @staticmethod and @classmethod _define_ the provided context. >Your lesson gives us no clue why James' first method, "dimensions()", >which he describes as a "class method", isn't a class method and doesn't >actually work correctly, even though it appears to at first glance. I didn't try to tackle his code. I think it is better to get the intended use of @classmethod and @staticmethod clear. Digging into whatever weird consequences there might be to his slightly wrong code just brings confusion. Cheers, Cameron Simpson From nupur.jha87 at gmail.com Wed Aug 14 12:10:47 2019 From: nupur.jha87 at gmail.com (Nupur Jha) Date: Wed, 14 Aug 2019 21:40:47 +0530 Subject: [Tutor] Package which can extract data from pdf Message-ID: Hi All, I have many pdf invoices with different formats. I want to extract the line items from these pdf files using python coding. I would request you all to guide me how can i achieve this. -- *Thanks & Regards,Nupur Jha* From mats at wichmann.us Wed Aug 14 14:16:56 2019 From: mats at wichmann.us (Mats Wichmann) Date: Wed, 14 Aug 2019 12:16:56 -0600 Subject: [Tutor] Package which can extract data from pdf In-Reply-To: References: Message-ID: <04047af6-ee64-ac9c-a9ea-2567c34655dd@wichmann.us> On 8/14/19 10:10 AM, Nupur Jha wrote: > Hi All, > > I have many pdf invoices with different formats. I want to extract the line > items from these pdf files using python coding. > > I would request you all to guide me how can i achieve this. > There are many packages that attempt to extract text from pdf. They have varying degrees of success on various different documents: you need to be aware that PDF wasn't intended to be used that way, it was written to *display* consistently. Sometimes the pdf is full of instructions for rendering that are hard for a reader to figure out, and need to be pieced together in possibly unexpected ways. My experience is that if you can select the interesting text in a pdf reader, and paste it into an editor, and it doesn't come out looking particularly mangled, then reading it programmatically has a pretty good chance of working. If not, you may be in trouble. That said... pypdf2, textract, and tika all have their supporters. You can search for all of these on pypi, which will give you links to the projects' home pages. (if it matters, tika is an interface to a bunch of Java code, so you're not using Python to read it, but you are using Python to control the process) There's a product called pdftables which specifically tries to be good at spreadsheet-like data, which your invoices *might* be. That is not a free product, however. For that one there's a Python interface that sends your data off to a web service and you get answers back. There are probably dozens more... this seems to be an area with a lot of reinvention going on. From rmlibre at riseup.net Wed Aug 14 13:34:18 2019 From: rmlibre at riseup.net (rmlibre at riseup.net) Date: Wed, 14 Aug 2019 10:34:18 -0700 Subject: [Tutor] cgi module help (original poster) In-Reply-To: References: Message-ID: On 2019-08-13 15:49, tutor-request at python.org wrote: > Send Tutor mailing list submissions to > tutor at python.org > > To subscribe or unsubscribe via the World Wide Web, visit > https://mail.python.org/mailman/listinfo/tutor > or, via email, send a message with subject or body 'help' to > tutor-request at python.org > > You can reach the person managing the list at > tutor-owner at python.org > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of Tutor digest..." > > Today's Topics: > > 1. Re: Fwd: Re: HELP PLEASE (Alan Gauld) > 2. Re: HELP PLEASE (David L Neil) > 3. Re: HELP PLEASE (Cameron Simpson) > 4. Re: HELP PLEASE (Sithembewena L. Dube) > 5. Re: HELP PLEASE (Alan Gauld) > 6. Re: cgi module help (Peter Otten) > > _______________________________________________ > Tutor maillist - Tutor at python.org > https://mail.python.org/mailman/listinfo/tutor I went looking through the cgi module code and found the limitation is in the way urllib's parse_qsl method parses data. It simply does not handle nested dictionaries correctly. This lead to a simple solution/hack by just json'ing the nested values: """Client Code""" import json from requests import sessions inner_metadata = json.dumps({"date": "2019-08", "id": "0000"}) metadata = {"metadata": inner_metadata} session = sessions.Session() session.post(, data=metadata) This is received on the server side and can be parsed with: """Server Code""" import cgi import json form = cgi.FieldStorage() metadata_json = form.getvalue("metadata", None) metadata = json.loads(metadata) print(metadata) > {"date": "2019-08", "id": "0000"} print(type(metadata)) > dict From wrw at mac.com Wed Aug 14 19:32:08 2019 From: wrw at mac.com (William Ray Wing) Date: Wed, 14 Aug 2019 19:32:08 -0400 Subject: [Tutor] Package which can extract data from pdf In-Reply-To: <04047af6-ee64-ac9c-a9ea-2567c34655dd@wichmann.us> References: <04047af6-ee64-ac9c-a9ea-2567c34655dd@wichmann.us> Message-ID: > On Aug 14, 2019, at 2:16 PM, Mats Wichmann wrote: > >> On 8/14/19 10:10 AM, Nupur Jha wrote: >> Hi All, >> >> I have many pdf invoices with different formats. I want to extract the line >> items from these pdf files using python coding. >> Treat this as a two part problem: part one is extracting the text; part two is parsing that text for your desired information. Unless you have a specific need for extracting the text with python, I?d recommend solving part one with an image-to-text reader. These have gotten really quite good recently (AI no doubt). Then parsing the text with python?s string handling routines should be pretty straightforward. Bill >> I would request you all to guide me how can i achieve this. >> > > There are many packages that attempt to extract text from pdf. They > have varying degrees of success on various different documents: you need > to be aware that PDF wasn't intended to be used that way, it was written > to *display* consistently. Sometimes the pdf is full of instructions > for rendering that are hard for a reader to figure out, and need to be > pieced together in possibly unexpected ways. My experience is that if > you can select the interesting text in a pdf reader, and paste it into > an editor, and it doesn't come out looking particularly mangled, then > reading it programmatically has a pretty good chance of working. If not, > you may be in trouble. That said... > > pypdf2, textract, and tika all have their supporters. You can search for > all of these on pypi, which will give you links to the projects' home pages. > > (if it matters, tika is an interface to a bunch of Java code, so you're > not using Python to read it, but you are using Python to control the > process) > > There's a product called pdftables which specifically tries to be good > at spreadsheet-like data, which your invoices *might* be. That is not a > free product, however. For that one there's a Python interface that > sends your data off to a web service and you get answers back. > > There are probably dozens more... this seems to be an area with a lot of > reinvention going on. > > _______________________________________________ > Tutor maillist - Tutor at python.org > To unsubscribe or change subscription options: > https://mail.python.org/mailman/listinfo/tutor From s.molnar at sbcglobal.net Thu Aug 15 10:10:32 2019 From: s.molnar at sbcglobal.net (Stephen P. Molnar) Date: Thu, 15 Aug 2019 10:10:32 -0400 Subject: [Tutor] Search for Text in File Message-ID: <5D5567D8.1080608@sbcglobal.net> I need to find a phrase in i text file in order to read a unique text string into a python3 application. I have become stuck and Google has not been of any use. Here is my attempt: #!/usr/bin/env python3 # -*- coding: utf-8 -*- # # Extract.Data.py # # # # " import re name = input("Enter Molecule Name: ") name_in = name+'_apo-1acl.dlg' re.search("RMSD TABLE",name_in()) and here is the portion of the text file (Acetyl_apo-1acl.dlg) containing the information: ________________________________________________________________________________ | | | | | Clus | Lowest | Run | Mean | Num | Histogram -ter | Binding | | Binding | in | Rank | Energy | | Energy | Clus| 5 10 15 20 25 30 35 _____|___________|_____|___________|_____|____:____|____:____|____:____|____:___ 1 | -4.39 | 15 | -4.29 | 2 |## 2 | -4.38 | 13 | -4.27 | 6 |###### 3 | -4.29 | 11 | -4.15 | 10 |########## 4 | -3.90 | 9 | -3.90 | 2 |## _____|___________|_____|___________|_____|______________________________________ Number of multi-member conformational clusters found = 4, out of 20 runs. RMSD TABLE __________ _____________________________________________________________________ | | | | | | Rank | Sub- | Run | Binding | Cluster | Reference | Grep | Rank | | Energy | RMSD | RMSD | Pattern _____|______|______|___________|_________|_________________|___________ 1 1 15 -4.39 0.00 92.25 RANKING 1 2 17 -4.19 0.99 92.15 RANKING 2 1 13 -4.38 0.00 93.14 RANKING 2 2 6 -4.37 1.21 92.80 RANKING 2 3 18 -4.35 0.87 93.26 RANKING 2 4 5 -4.33 1.23 92.85 RANKING 2 5 3 -4.17 1.17 93.40 RANKING 2 6 7 -3.99 1.33 92.98 RANKING 3 1 11 -4.29 0.00 91.37 RANKING 3 2 19 -4.29 0.31 91.27 RANKING 3 3 16 -4.25 1.08 91.14 RANKING 3 4 10 -4.25 0.86 91.13 RANKING 3 5 1 -4.13 0.94 91.83 RANKING 3 6 20 -4.11 1.03 91.89 RANKING 3 7 12 -4.11 0.60 91.28 RANKING 3 8 2 -4.10 0.86 91.56 RANKING 3 9 8 -4.09 0.73 91.52 RANKING 3 10 4 -3.89 1.24 91.91 RANKING 4 1 9 -3.90 0.00 95.00 RANKING 4 2 14 -3.90 0.92 94.92 RANKING _______________________________________________________________________ INFORMATION ENTROPY ANALYSIS FOR THIS CLUSTERING ________________________________________________ Information entropy for this clustering = 0.39 (rmstol = 2.00 Angstrom) Everything that I have tried returns 'TypeError: 'str' object is not callable'. Assistance will be much appreciated. Thanks in advance. -- Stephen P. Molnar, Ph.D. Life is a fuzzy set http://www.Molecular-Modeling.net Multivariate and stochastic 614.312.7528 (c) Skype: smolnar1 From david at graniteweb.com Thu Aug 15 13:23:25 2019 From: david at graniteweb.com (David Rock) Date: Thu, 15 Aug 2019 12:23:25 -0500 Subject: [Tutor] Search for Text in File In-Reply-To: <5D5567D8.1080608@sbcglobal.net> References: <5D5567D8.1080608@sbcglobal.net> Message-ID: <74F109B8-6EC6-4173-9CD0-A6ADBFD23B93@graniteweb.com> > On Aug 15, 2019, at 09:10, Stephen P. Molnar wrote: > > > Everything that I have tried returns 'TypeError: 'str' object is not callable?. As a rule, posting actual output is better than paraphrasing. We can?t tell what you have tried, or what the expected result actually is. We also don?t know the context in which the TypeError occurs. Please paste the actual text session showing your interaction with the program _and_ the full traceback so we can see what the TypeError is related to in the code. ? David Rock david at graniteweb.com From __peter__ at web.de Thu Aug 15 13:35:03 2019 From: __peter__ at web.de (Peter Otten) Date: Thu, 15 Aug 2019 19:35:03 +0200 Subject: [Tutor] Search for Text in File References: <5D5567D8.1080608@sbcglobal.net> Message-ID: Stephen P. Molnar wrote: > I need to find a phrase in i text file in order to read a unique text > string into a python3 application. > > I have become stuck and Google has not been of any use. > > Here is my attempt: > import re > > name = input("Enter Molecule Name: ") > > name_in = name+'_apo-1acl.dlg' > re.search("RMSD TABLE",name_in()) Stephen, you cannot throw random snippets of Python-lookalike code at a problem and expect it to work. When I wrote > Work your way through a Python tutorial to pick up the basics some two years ago I really meant it. If you can't be bothered have a look at preshrunk tools like grep, or find someone to write the code for you. > Thanks in advance. You're welcome. From alan.gauld at yahoo.co.uk Thu Aug 15 13:53:42 2019 From: alan.gauld at yahoo.co.uk (Alan Gauld) Date: Thu, 15 Aug 2019 18:53:42 +0100 Subject: [Tutor] Search for Text in File In-Reply-To: <5D5567D8.1080608@sbcglobal.net> References: <5D5567D8.1080608@sbcglobal.net> Message-ID: On 15/08/2019 15:10, Stephen P. Molnar wrote: > I need to find a phrase in i text file in order to read a unique text > string into a python3 application. > > I have become stuck and Google has not been of any use. I'm sorry but there is so much wrong here it is difficult to know where to begin. > #!/usr/bin/env python3 > # -*- coding: utf-8 -*- > # > # Extract.Data.py > > import re You don't need re since you are not using any regular expressions. > name = input("Enter Molecule Name: ") > > name_in = name+'_apo-1acl.dlg' This creates a string called name_in. > re.search("RMSD TABLE",name_in()) And here you search for the string(not regular expression) "RMSD TABLE" in the return value from name_in() But name_in is a string, you cannot call a string. >>> "foo"() Traceback (most recent call last): File "", line 1, in "foo"() TypeError: 'str' object is not callable > and here is the portion of the text file (Acetyl_apo-1acl.dlg) > containing the information: > > Number of multi-member conformational clusters found = 4, out of 20 runs. > > RMSD TABLE > __________ And this is the only line containing your string so, even if your code worked, this is the only line you would locate. It doesn't look very useful... > Everything that I have tried returns 'TypeError: 'str' object is not > callable'. See my comments above. -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos From tmrsg11 at gmail.com Fri Aug 16 19:46:06 2019 From: tmrsg11 at gmail.com (C W) Date: Fri, 16 Aug 2019 19:46:06 -0400 Subject: [Tutor] What is Tuple in the typing module? Message-ID: Hi everyone, What exactly is Tuple in the typing module? What does it do? This is the definition from its website. https://docs.python.org/3/library/typing.html "A type alias is defined by assigning the type to the alias" I have no idea what that means. Here's the example from the documentation: from typing import Dict, Tuple, Sequence ConnectionOptions = Dict[str, str]Address = Tuple[str, int]Server = Tuple[Address, ConnectionOptions] def broadcast_message(message: str, servers: Sequence[Server]) -> None: ... # The static type checker will treat the previous type signature as# being exactly equivalent to this one.def broadcast_message( message: str, servers: Sequence[Tuple[Tuple[str, int], Dict[str, str]]]) -> None: ... I think this even more confusing. Can someone explain this in simple words? I don't have a intense computer science background. Thanks a lot! From __peter__ at web.de Sat Aug 17 05:36:24 2019 From: __peter__ at web.de (Peter Otten) Date: Sat, 17 Aug 2019 11:36:24 +0200 Subject: [Tutor] What is Tuple in the typing module? References: Message-ID: C W wrote: > Hi everyone, > > What exactly is Tuple in the typing module? What does it do? > > This is the definition from its website. > https://docs.python.org/3/library/typing.html > "A type alias is defined by assigning the type to the alias" > > I have no idea what that means. > > Here's the example from the documentation: > > from typing import Dict, Tuple, Sequence > ConnectionOptions = Dict[str, str]Address = Tuple[str, int]Server = > Tuple[Address, ConnectionOptions] > def broadcast_message(message: str, servers: Sequence[Server]) -> None: > ... > # The static type checker will treat the previous type signature as# > being exactly equivalent to this one.def broadcast_message( > message: str, > servers: Sequence[Tuple[Tuple[str, int], Dict[str, str]]]) -> > None: > ... > > > I think this even more confusing. Can someone explain this in simple > words? I don't have a intense computer science background. After the line ANSWER = 42 you can write print("The answer is", ANSWER) rather than print("The answer is", 42) Likewise, after Location = Tuple[float, float, float] "Location" has become an "alias" for a tuple of 3 floats, and you can write def distance(a: Location, b: Location) --> float: ... instead of def distance( a: Tuple[float, float, float], b: Tuple[float, float, float] ) --> float: ... Basically, use descriptive names for types rather than repeating their definition. From alan.gauld at yahoo.co.uk Sat Aug 17 05:43:24 2019 From: alan.gauld at yahoo.co.uk (Alan Gauld) Date: Sat, 17 Aug 2019 10:43:24 +0100 Subject: [Tutor] What is Tuple in the typing module? In-Reply-To: References: Message-ID: On 17/08/2019 00:46, C W wrote: The formatting seems messed up I'll try to straighten it out. I hope I get it right! Caveat: I'm no expert in the typing module, I've read the docs but never found any use for it. > What exactly is Tuple in the typing module? What does it do? It specifies a tuple type. I assume you understand what a tuple is in regular Python code? > This is the definition from its website. > https://docs.python.org/3/library/typing.html > "A type alias is defined by assigning the type to the alias" > > I have no idea what that means. It just means that an alias is a label that you can use to signify a type. And you can effectively create new "types" by combining simpler types > Here's the example from the documentation: > > from typing import Dict, Tuple, Sequence ConnectionOptions = Dict[str, str] Address = Tuple[str,int]Server = Tuple[Address, ConnectionOptions] So this creates 3 new type aliases: ConnectionOptions, Address, Server which are defined in terms of basic Python types,. So Address is a tuple of a string and integer. > def broadcast_message(message: str, servers: Sequence[Server]) -> None: Ad this defines a function where the parameter types are specified in terms of the new type names that we just created. > # The static type checker will treat the previous type signature as# > being exactly equivalent to this one. > def broadcast_message( > message: str, > servers: Sequence[Tuple[Tuple[str, int], Dict[str, str]]]) -> None: And this is the same function but with the parameters expanded into their traditional basic types. Without all the type hinting gubbins it would simply be: def broadcast_message(message, servers): .... So all the detritus above is doing is attempting to make it clearer what the two parameters actually are in data terms. The first is a string, the second is a complex structure of nested tuples and a dict (which probably should all be wrapped in a class!). > I think this even more confusing. Can someone explain this in simple words? > I don't have a intense computer science background. Type hints are a way to specify the types of function parameters. They are an attempt to make complex type structures more readable rather than fixing the data to be simpler (which, to be fair, may not always be possible/easy). They are also an attempt to bring some of the "benefits" of static typing into Python but with very limited success. But they are only hints, you can happily survive without them. -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos From thejal.3287 at gmail.com Sun Aug 18 00:35:52 2019 From: thejal.3287 at gmail.com (Thejal Ramesh) Date: Sun, 18 Aug 2019 12:35:52 +0800 Subject: [Tutor] python question Message-ID: Hi, i have a question regarding this question. I'm not quite sure what the question is asking. Part A: Popular (1.5 Marks) Write a function popular(graph list, n) that returns a list of people who have at least n friends. Each person is identified by the number of their vertex. Input: a nested list graph list that represents a graph as an adjacency list, that models the friendships at Monash; and a non-negative integer n. Output: a list of integers, where each integer is a person with at least n friends. If no person has at least n friends, return an empty list. The list may be in any order. Examples clayton_list = [ [1,2,3], [0,3], [0,4], [0,1], [2] ] The example graph clayton list is provided for illustrative purpose. Your implemented function must be able to handle arbitrary graphs in list form . a) Calling popular(clayton list,2) returns [0,1,2,3]. b) Calling popular(clayton list,3) returns [0] . c) Calling popular(clayton list,0) returns [0,1,2,3,4]. From alan.gauld at yahoo.co.uk Sun Aug 18 03:54:05 2019 From: alan.gauld at yahoo.co.uk (Alan Gauld) Date: Sun, 18 Aug 2019 08:54:05 +0100 Subject: [Tutor] python question In-Reply-To: References: Message-ID: On 18/08/2019 05:35, Thejal Ramesh wrote: > Hi, i have a question regarding this question. I'm not quite sure what the > question is asking. > Part A: Popular (1.5 Marks) > Write a function popular(graph list, n) that returns a list of people who > have at least n friends. Each person is identified by the number of their > vertex. > Examples clayton_list = [ [1,2,3], [0,3], [0,4], [0,1], [2] ] > The example graph clayton list is provided for illustrative purpose. Your > implemented function must be able to handle arbitrary graphs in list form > . a) Calling popular(clayton list,2) returns [0,1,2,3]. > b) Calling popular(clayton list,3) returns [0] > . c) Calling popular(clayton list,0) returns [0,1,2,3,4]. The question is asking you to write a function that returns the indexes of the elements in the input list of length equal to or greater than the input value. Looking at the sample data, clayton_list a) returns all but the last item because only the last item has less than 2 members b) returns only the first item because only the first item contains 3 or more members c) returns all items because all have zero or more members. What the question does not specify is what the function should return if there are no members found. I would assume an empty list... To do this you will need some kind of loop and a test and build a list. If you know about list comprehensions that might be one option. (If you don't, use a normal for loop) HTH -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos From steve at pearwood.info Sun Aug 18 05:53:44 2019 From: steve at pearwood.info (Steven D'Aprano) Date: Sun, 18 Aug 2019 19:53:44 +1000 Subject: [Tutor] python question In-Reply-To: References: Message-ID: <20190818095342.GQ16011@ando.pearwood.info> On Sun, Aug 18, 2019 at 12:35:52PM +0800, Thejal Ramesh wrote: > Hi, i have a question regarding this question. I'm not quite sure what the > question is asking. Ask your tutor. We can help you with learning Python the programming language, not graph theory. https://en.wikipedia.org/wiki/Graph_theory -- Steven From nathan-tech at hotmail.com Sun Aug 18 19:55:25 2019 From: nathan-tech at hotmail.com (nathan tech) Date: Sun, 18 Aug 2019 23:55:25 +0000 Subject: [Tutor] which of these is more efficient? Message-ID: Hi there, So I am running over some coding ideas in my head for creating a map for a game. This map would expand based on how far the user explores. I figure there are two ways to do this: 1: the list method: map=[] for x in range(3): ?temp=[] ?for y in range(3): ? temp.append(default_grid_format) ?map.append(temp) then when ever the user explores a square not on the current map, it would do this: for x in range(len(map)): ?map[x].append(default_grid_format) temp=[] for x in range(len(map[0])): ?temp.append(default_grid_format) map.append(temp) Obviously, though, this creates a lot of data for squares that are still ultimately unexplored. So here was my other idea: 2. the dictionary method: map={} for x in range(3): ?for y in range(3): ? key=str(x)+":"+str(y) ? map[key]=default_grid_format Then when user explores new square do: key=str(player_x)+":"+str(player_y) map[key]=default_grid_format Is this an efficient method compared to 1? Is it, code wise, sound logic? I guess I'm just looking for a second opinion from experienced peoples. thanks everyone. Nathan From __peter__ at web.de Mon Aug 19 05:49:41 2019 From: __peter__ at web.de (Peter Otten) Date: Mon, 19 Aug 2019 11:49:41 +0200 Subject: [Tutor] which of these is more efficient? References: Message-ID: nathan tech wrote: > Hi there, > > So I am running over some coding ideas in my head for creating a map for > a game. > > This map would expand based on how far the user explores. > > I figure there are two ways to do this: > > 1: the list method: > > map=[] > > for x in range(3): > > temp=[] > > for y in range(3): > > temp.append(default_grid_format) > > map.append(temp) > > > then when ever the user explores a square not on the current map, it > would do this: > > for x in range(len(map)): > > map[x].append(default_grid_format) > > temp=[] > > for x in range(len(map[0])): > > temp.append(default_grid_format) > > map.append(temp) > > Obviously, though, this creates a lot of data for squares that are still > ultimately unexplored. > > So here was my other idea: > > > 2. the dictionary method: > > map={} > > for x in range(3): > > for y in range(3): > > key=str(x)+":"+str(y) > > map[key]=default_grid_format > > > Then when user explores new square do: > > key=str(player_x)+":"+str(player_y) > > map[key]=default_grid_format > > > Is this an efficient method compared to 1? > > Is it, code wise, sound logic? > > > > I guess I'm just looking for a second opinion from experienced peoples. > > thanks everyone. Forget about "efficiency", try to write clean code. For the above samples this means - no unused data - no unnecessary stringification If you base your code on a defaultdict cells spring into existence as needed: $ cat tmp.py from collections import defaultdict def get_default_format(): return "whatever" def show_cell(x, y): print(f"x = {x}, y = {y}, format = {grid_formats[x,y]!r}") grid_formats = defaultdict(get_default_format) grid_formats[42, 42] = "this cell is special" player_location = 3, 4 show_cell(*player_location) show_cell(42, 42) $ python3.6 tmp.py x = 3, y = 4, format = 'whatever' x = 42, y = 42, format = 'this cell is special' From breamoreboy at gmail.com Mon Aug 19 05:53:52 2019 From: breamoreboy at gmail.com (Mark Lawrence) Date: Mon, 19 Aug 2019 10:53:52 +0100 Subject: [Tutor] which of these is more efficient? In-Reply-To: References: Message-ID: On 19/08/2019 00:55, nathan tech wrote: > Hi there, > > So I am running over some coding ideas in my head for creating a map for > a game. > > This map would expand based on how far the user explores. > > I figure there are two ways to do this: > > 1: the list method: > > map=[] > > for x in range(3): > > ?temp=[] > > ?for y in range(3): > > ? temp.append(default_grid_format) > > ?map.append(temp) > > > then when ever the user explores a square not on the current map, it > would do this: > > for x in range(len(map)): > > ?map[x].append(default_grid_format) > > temp=[] > > for x in range(len(map[0])): > > ?temp.append(default_grid_format) > > map.append(temp) > > Obviously, though, this creates a lot of data for squares that are still > ultimately unexplored. > > So here was my other idea: > > > 2. the dictionary method: > > map={} > > for x in range(3): > > ?for y in range(3): > > ? key=str(x)+":"+str(y) > > ? map[key]=default_grid_format > > > Then when user explores new square do: > > key=str(player_x)+":"+str(player_y) > > map[key]=default_grid_format > > > Is this an efficient method compared to 1? > > Is it, code wise, sound logic? > > > > I guess I'm just looking for a second opinion from experienced peoples. > > thanks everyone. > > Nathan > Quite frankly I've no idea as in 19 years of using Python my gut has never once been correct about code efficiency, so I suggest that you try it and see. Start with https://docs.python.org/3/library/timeit.html. Of course this assumes that you need to do this in the first place :) -- My fellow Pythonistas, ask not what our language can do for you, ask what you can do for our language. Mark Lawrence From alan.gauld at yahoo.co.uk Mon Aug 19 07:50:36 2019 From: alan.gauld at yahoo.co.uk (Alan Gauld) Date: Mon, 19 Aug 2019 12:50:36 +0100 Subject: [Tutor] which of these is more efficient? In-Reply-To: References: Message-ID: On 19/08/2019 00:55, nathan tech wrote: > Is this an efficient method compared to 1? Efficient in what sense? The amount of code to write? The amount of computing resources used? The speed - and does that matter in an interactive game like this? -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos From mats at wichmann.us Mon Aug 19 10:02:12 2019 From: mats at wichmann.us (Mats Wichmann) Date: Mon, 19 Aug 2019 08:02:12 -0600 Subject: [Tutor] which of these is more efficient? In-Reply-To: References: Message-ID: <614ba256-112a-4f7d-ab64-0356309d80eb@wichmann.us> On 8/18/19 5:55 PM, nathan tech wrote: > Hi there, > > So I am running over some coding ideas in my head for creating a map for > a game. > > This map would expand based on how far the user explores. > > I figure there are two ways to do this: > > 1: the list method: > > map=[] > for x in range(3): > ?temp=[] > ?for y in range(3): > ? temp.append(default_grid_format) > ?map.append(temp) > > then when ever the user explores a square not on the current map, it > would do this: > > for x in range(len(map)): > ?map[x].append(default_grid_format) > temp=[] > for x in range(len(map[0])): > ?temp.append(default_grid_format) > map.append(temp) > > Obviously, though, this creates a lot of data for squares that are still > ultimately unexplored. > > So here was my other idea: > > 2. the dictionary method: > > map={} > for x in range(3): > ?for y in range(3): > ? key=str(x)+":"+str(y) > ? map[key]=default_grid_format > > Then when user explores new square do: > > key=str(player_x)+":"+str(player_y) > map[key]=default_grid_format > > > Is this an efficient method compared to 1? > > Is it, code wise, sound logic? > > > > I guess I'm just looking for a second opinion from experienced peoples. A few notes... There's a nice little tension in design and programming of a project: don't optimize too early, you may not need to, and/or your early guesses may be completely wrong VS. if you pick a bad design up front, it may be "too late" to optimize away the problems that brings later. Then again they _also_ say "build one to throw away" :) You haven't defined what needs to happen for a new square. If the "map" (please don't use that as a variable name, by the way, as it's already a Python builtin function) is a rectangular grid, each square has eight neighbors. If you've ever played with minesweeper, you see this in action... "exploring" from one point means figuring out which of the neighbors has a mine. So what should happen for a "new" square? Do you want to generate the information for all of those neighbors? Your conceptual code seems to just add a row-and-column, which seems a little odd... what if the exploration went in the other direction, i.e. "left" or "up"? Python has some support for "don't calculate it until it's needed", called generators. Depending on your design you may or may not be able to make use of such. Here's a silly little snippet to illustrate a generator which produces the neighbors of a square (in this case, just the coordinates): def neighbors(point): x, y = point yield x + 1, y yield x - 1, y yield x, y + 1 yield x, y - 1 yield x + 1, y + 1 yield x + 1, y - 1 yield x - 1, y + 1 yield x - 1, y - 1 nlist = neighbors(point) print(f"neighbors returns {nlist}") print(f"neighbors of {point}: {list(nlist)}") When run: neighbors returns neighbors of (7, 6): [(8, 6), (6, 6), (7, 7), (7, 5), (8, 7), (8, 5), (6, 7), (6, 5)] ... the data (just the coordinates of a neighbor square) is not generated until you consume it, which the string in the print call forces by calling list() on it. The more normal case is you'd loop over it... It this was too complicated for where you are in your Python studies, don't worry about it, but you'll get there eventually :) Micro-comment: a piece of code I'd hope to never see again: for x in range(len(map)): map[x].append(default_grid_format) this lazily produces a counter from the size of an iterable object (similar in concept to a generator), and then uses the counter to index into said object; that's not needed since you can just iterate the object directly. Instead write it like this: for m in map: m.append(default_grid_format) Micro-comment: you can use anything (well, anything "hashable") as the key for a dict. So for: key=str(x)+":"+str(y) you can just do: key = (x, y) From nathan-tech at hotmail.com Mon Aug 19 16:49:00 2019 From: nathan-tech at hotmail.com (nathan tech) Date: Mon, 19 Aug 2019 20:49:00 +0000 Subject: [Tutor] which of these is more efficient? In-Reply-To: <614ba256-112a-4f7d-ab64-0356309d80eb@wichmann.us> References: <614ba256-112a-4f7d-ab64-0356309d80eb@wichmann.us> Message-ID: Hello everyone, thank you so much for your responses. When I said efficient, I meant in terms of storage, both in a file for saving maps if the user chooses to save, and in the computers memory. Low memory programs=happy users. sometimes. These responses have been really helpful, and I did not realise I could do something like: key=(x, y) game_map[key]=bla. LEarned a lot, so thanks! Nathan On 19/08/2019 15:02, Mats Wichmann wrote: > On 8/18/19 5:55 PM, nathan tech wrote: >> Hi there, >> >> So I am running over some coding ideas in my head for creating a map for >> a game. >> >> This map would expand based on how far the user explores. >> >> I figure there are two ways to do this: >> >> 1: the list method: >> >> map=[] >> for x in range(3): >> ?temp=[] >> ?for y in range(3): >> ? temp.append(default_grid_format) >> ?map.append(temp) >> >> then when ever the user explores a square not on the current map, it >> would do this: >> >> for x in range(len(map)): >> ?map[x].append(default_grid_format) >> temp=[] >> for x in range(len(map[0])): >> ?temp.append(default_grid_format) >> map.append(temp) >> >> Obviously, though, this creates a lot of data for squares that are still >> ultimately unexplored. >> >> So here was my other idea: >> >> 2. the dictionary method: >> >> map={} >> for x in range(3): >> ?for y in range(3): >> ? key=str(x)+":"+str(y) >> ? map[key]=default_grid_format >> >> Then when user explores new square do: >> >> key=str(player_x)+":"+str(player_y) >> map[key]=default_grid_format >> >> >> Is this an efficient method compared to 1? >> >> Is it, code wise, sound logic? >> >> >> >> I guess I'm just looking for a second opinion from experienced peoples. > A few notes... > > There's a nice little tension in design and programming of a project: > don't optimize too early, you may not need to, and/or your early guesses > may be completely wrong VS. if you pick a bad design up front, it may be > "too late" to optimize away the problems that brings later. Then again > they _also_ say "build one to throw away" :) > > You haven't defined what needs to happen for a new square. If the "map" > (please don't use that as a variable name, by the way, as it's already a > Python builtin function) is a rectangular grid, each square has eight > neighbors. If you've ever played with minesweeper, you see this in > action... "exploring" from one point means figuring out which of the > neighbors has a mine. So what should happen for a "new" square? Do you > want to generate the information for all of those neighbors? Your > conceptual code seems to just add a row-and-column, which seems a little > odd... what if the exploration went in the other direction, i.e. "left" > or "up"? > > Python has some support for "don't calculate it until it's needed", > called generators. Depending on your design you may or may not be able > to make use of such. Here's a silly little snippet to illustrate a > generator which produces the neighbors of a square (in this case, just > the coordinates): > > def neighbors(point): > x, y = point > yield x + 1, y > yield x - 1, y > yield x, y + 1 > yield x, y - 1 > yield x + 1, y + 1 > yield x + 1, y - 1 > yield x - 1, y + 1 > yield x - 1, y - 1 > > nlist = neighbors(point) > print(f"neighbors returns {nlist}") > print(f"neighbors of {point}: {list(nlist)}") > > When run: > > neighbors returns > neighbors of (7, 6): [(8, 6), (6, 6), (7, 7), (7, 5), (8, 7), (8, 5), > (6, 7), (6, 5)] > > ... the data (just the coordinates of a neighbor square) is not > generated until you consume it, which the string in the print call > forces by calling list() on it. The more normal case is you'd loop over > it... > > It this was too complicated for where you are in your Python studies, > don't worry about it, but you'll get there eventually :) > > > Micro-comment: a piece of code I'd hope to never see again: > > for x in range(len(map)): > map[x].append(default_grid_format) > > this lazily produces a counter from the size of an iterable object > (similar in concept to a generator), and then uses the counter to index > into said object; that's not needed since you can just iterate the > object directly. Instead write it like this: > > for m in map: > m.append(default_grid_format) > > > Micro-comment: you can use anything (well, anything "hashable") as the > key for a dict. So for: > > key=str(x)+":"+str(y) > > you can just do: > > key = (x, y) > > > _______________________________________________ > Tutor maillist - Tutor at python.org > To unsubscribe or change subscription options: > https://mail.python.org/mailman/listinfo/tutor From tmrsg11 at gmail.com Mon Aug 19 21:03:37 2019 From: tmrsg11 at gmail.com (C W) Date: Mon, 19 Aug 2019 21:03:37 -0400 Subject: [Tutor] What is Tuple in the typing module? In-Reply-To: References: Message-ID: Thank you, Peter and Alan. Both very helpful. I was able to figure it out. Cheers! On Sat, Aug 17, 2019 at 5:45 AM Alan Gauld via Tutor wrote: > On 17/08/2019 00:46, C W wrote: > > The formatting seems messed up I'll try to straighten it out. > I hope I get it right! > > Caveat: I'm no expert in the typing module, I've read the > docs but never found any use for it. > > > What exactly is Tuple in the typing module? What does it do? > > It specifies a tuple type. I assume you understand what > a tuple is in regular Python code? > > > This is the definition from its website. > > https://docs.python.org/3/library/typing.html > > "A type alias is defined by assigning the type to the alias" > > > > I have no idea what that means. > > It just means that an alias is a label that you can use > to signify a type. And you can effectively create new > "types" by combining simpler types > > > > Here's the example from the documentation: > > > > from typing import Dict, Tuple, Sequence > ConnectionOptions = Dict[str, str] > Address = Tuple[str,int]Server = Tuple[Address, ConnectionOptions] > > So this creates 3 new type aliases: ConnectionOptions, Address, Server > which are defined in terms of basic Python types,. > So Address is a tuple of a string and integer. > > > def broadcast_message(message: str, servers: Sequence[Server]) -> None: > > Ad this defines a function where the parameter types are > specified in terms of the new type names that we just > created. > > > # The static type checker will treat the previous type signature as# > > being exactly equivalent to this one. > > > def broadcast_message( > > message: str, > > servers: Sequence[Tuple[Tuple[str, int], Dict[str, str]]]) -> > None: > > And this is the same function but with the parameters expanded > into their traditional basic types. > > Without all the type hinting gubbins it would simply be: > > def broadcast_message(message, servers): > .... > > So all the detritus above is doing is attempting to make it > clearer what the two parameters actually are in data terms. > The first is a string, the second is a complex structure > of nested tuples and a dict (which probably should all > be wrapped in a class!). > > > I think this even more confusing. Can someone explain this in simple > words? > > I don't have a intense computer science background. > > Type hints are a way to specify the types of function parameters. > They are an attempt to make complex type structures more readable > rather than fixing the data to be simpler (which, to be fair, > may not always be possible/easy). They are also an attempt to > bring some of the "benefits" of static typing into Python but > with very limited success. But they are only hints, you can > happily survive without them. > > -- > Alan G > Author of the Learn to Program web site > http://www.alan-g.me.uk/ > http://www.amazon.com/author/alan_gauld > Follow my photo-blog on Flickr at: > http://www.flickr.com/photos/alangauldphotos > > > _______________________________________________ > Tutor maillist - Tutor at python.org > To unsubscribe or change subscription options: > https://mail.python.org/mailman/listinfo/tutor > From jjhartley at gmail.com Thu Aug 22 01:53:07 2019 From: jjhartley at gmail.com (James Hartley) Date: Thu, 22 Aug 2019 00:53:07 -0500 Subject: [Tutor] Is nesting functions only for data hiding overkill? Message-ID: Yes, nesting functions is valuable & necessary for closures and wrapping functions for creating properties. But is nesting, simply for hiding data, a preferred solution? I have a number of member functions which are prefaced with underscores pointing out that they should not From jjhartley at gmail.com Thu Aug 22 02:02:18 2019 From: jjhartley at gmail.com (James Hartley) Date: Thu, 22 Aug 2019 01:02:18 -0500 Subject: [Tutor] Is nesting functions only for data hiding overkill? In-Reply-To: References: Message-ID: Yes, nesting functions is valuable & necessary for closures and wrapping functions for creating properties. But is nesting, simply for hiding data, a preferred solution? I have a number of member functions which are prefaced with underscores pointing out that they should not be called by client code. Is nesting considered Pythonic? Thanks! From cs at cskk.id.au Thu Aug 22 02:05:39 2019 From: cs at cskk.id.au (Cameron Simpson) Date: Thu, 22 Aug 2019 16:05:39 +1000 Subject: [Tutor] Is nesting functions only for data hiding overkill? In-Reply-To: References: Message-ID: <20190822060539.GA26485@cskk.homeip.net> On 22Aug2019 00:53, James Hartley wrote: >Yes, nesting functions is valuable & necessary for closures and wrapping >functions for creating properties. But is nesting, simply for hiding data, >a preferred solution? I have a number of member functions which are >prefaced with underscores pointing out that they should not I think you're not using "nesting" the way I think of it. Can you provide an example bit of code illustrating what you're thinking of and explaining your concerns? Also, your paragraph looks a little truncated. Cheers, Cameron Simpson From sarah123ed at gmail.com Wed Aug 21 21:26:34 2019 From: sarah123ed at gmail.com (Sarah Hembree) Date: Wed, 21 Aug 2019 21:26:34 -0400 Subject: [Tutor] Chunking list/array data? Message-ID: How do you chunk data? We came up with the below snippet. It works (with integer list data) for our needs, but it seems so clunky. def _chunks(lst: list, size: int) -> list: return [lst[x:x+size] for x in range(0, len(lst), size)] What do you do? Also, what about doing this lazily so as to keep memory drag at a minimum? --- We not only inherit the Earth from our Ancestors, we borrow it from our Children. Aspire to grace. From __peter__ at web.de Thu Aug 22 05:58:05 2019 From: __peter__ at web.de (Peter Otten) Date: Thu, 22 Aug 2019 11:58:05 +0200 Subject: [Tutor] Chunking list/array data? References: Message-ID: Sarah Hembree wrote: > How do you chunk data? We came up with the below snippet. It works (with > integer list data) for our needs, but it seems so clunky. > > def _chunks(lst: list, size: int) -> list: > return [lst[x:x+size] for x in range(0, len(lst), size)] > > What do you do? Also, what about doing this lazily so as to keep memory > drag at a minimum? If you don't mind filling up the last chunk with dummy values this will generate tuples on demand from an arbitrary iterable: >>> from itertools import zip_longest >>> def chunks(items, n): ... return zip_longest(*[iter(items)]*n) ... >>> chunked = chunks("abcdefgh", 3) >>> next(chunked) ('a', 'b', 'c') >>> list(chunked) [('d', 'e', 'f'), ('g', 'h', None)] From cs at cskk.id.au Thu Aug 22 06:00:14 2019 From: cs at cskk.id.au (Cameron Simpson) Date: Thu, 22 Aug 2019 20:00:14 +1000 Subject: [Tutor] Chunking list/array data? In-Reply-To: References: Message-ID: <20190822100014.GA75022@cskk.homeip.net> On 21Aug2019 21:26, Sarah Hembree wrote: >How do you chunk data? We came up with the below snippet. It works (with >integer list data) for our needs, but it seems so clunky. > > def _chunks(lst: list, size: int) -> list: > return [lst[x:x+size] for x in range(0, len(lst), size)] > >What do you do? Also, what about doing this lazily so as to keep memory >drag at a minimum? This looks pretty good to me. But as you say, it constructs the complete list of chunks and returns them all. For many chunks that is both slow and memory hungry. If you want to conserve memory and return chunks in a lazy manner you can rewrite this as a generator. A first cut might look like this: def _chunks(lst: list, size: int) -> list: for x in range(0, len(lst), size): yield lst[x:x+size] which causes _chunk() be a generator function: it returns an iterator which yields each chunk one at a time - the body of the function is kept "running", but stalled. When you iterate over the return from _chunk() Python runs that stalled function until it yields a value, then stalls it again and hands you that value. Modern Python has a thing called a "generator expression". Your original function is a "list comprehension": it constructs a list of values and returns that list. In many cases, particularly for very long lists, that can be both slow and memory hungry. You can rewrite such a thing like this: def _chunks(lst: list, size: int) -> list: return ( lst[x:x+size] for x in range(0, len(lst), size) ) Omitting the square brackets turns this into a generator expression. It returns an iterator instead of a list, which functions like the generator function I sketched, and generates the chunks lazily. Cheers, Cameron Simpson From hs78677 at gmail.com Thu Aug 22 12:28:39 2019 From: hs78677 at gmail.com (himanshu singh) Date: Thu, 22 Aug 2019 21:58:39 +0530 Subject: [Tutor] help for the python class Message-ID: need help i am creating the python class but it shows me error i am also attaching the file with it please go through it and give the solution thanks From david at graniteweb.com Thu Aug 22 14:25:25 2019 From: david at graniteweb.com (David Rock) Date: Thu, 22 Aug 2019 13:25:25 -0500 Subject: [Tutor] help for the python class In-Reply-To: References: Message-ID: > On Aug 22, 2019, at 11:28, himanshu singh wrote: > > need help i am creating the python class but it shows me error i am also > attaching the file with it please go through it and give the solution Unfortunately, the mailing list strips out attachments, so we can?t see what you sent. Please paste the pertinent code into the body of the email. Also, please paste the exact error you are getting so we can see to what part of the code your error refers. Any other info, like the Operating System and version of python you are using will help, too. ? David Rock david at graniteweb.com From mats at wichmann.us Thu Aug 22 14:02:20 2019 From: mats at wichmann.us (Mats Wichmann) Date: Thu, 22 Aug 2019 12:02:20 -0600 Subject: [Tutor] help for the python class In-Reply-To: References: Message-ID: <5a6aeec7-4f16-4721-234c-acd65fa538b7@wichmann.us> On 8/22/19 10:28 AM, himanshu singh wrote: > need help i am creating the python class but it shows me error i am also > attaching the file with it please go through it and give the solution Unfortunately, you're going to have to redo this question. Attachments don't usually survive the mailing list software, yours did not. Please include the code and error messages (in full, not curated as you may leave something out) in the body of the email, and describe what you are trying to do (we don't want to guess). We won't usually "give you the solution", but will point out problems and answer questions, as is usual in a tutoring arrangement. Hope to hear from you soon! From alan.gauld at yahoo.co.uk Fri Aug 23 14:15:17 2019 From: alan.gauld at yahoo.co.uk (Alan Gauld) Date: Fri, 23 Aug 2019 19:15:17 +0100 Subject: [Tutor] Fwd: Mailing list chaos. In-Reply-To: <7e8203e1-4db0-f3cd-4d05-646145099da1@yahoo.co.uk> References: <7e8203e1-4db0-f3cd-4d05-646145099da1@yahoo.co.uk> Message-ID: <23db56a3-54da-be13-a2d8-e4bbbd577819@yahoo.co.uk> Resending, because it didn't seem to get through first time... -------- Forwarded Message -------- Subject: Mailing list chaos. Date: Fri, 23 Aug 2019 18:57:57 +0100 From: Alan Gauld To: tutor Hi all, Like everyone else I've been un-subscribed and now re-subscribed to the tutor list. My apologies but I had no notice that this would happen. As I understand it the issue was a server wide problem affecting all Python lists which was traced to an issue on the tutor list but they ad no way to narrow it down to which members configs were at fault. So they took the draconian decision to unsubscribe everyone and then re-invite them to join. Without thinking to warn the list owners first.... Apologies. We are now close to 400 members again, but we were close to 800 last time I looked. It will be interesting to see how many more make it back to the fold (and even more interesting to know the reasons for those who don't!) I also went through and removed moderation from everyone on the list as of an hour ago. Hopefully normal service is now restored.... PS For those interested the issue was related to senderscore spamtraps: https://www.senderscore.org/ don't ask me... -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos From PyTutor at DancesWithMice.info Fri Aug 23 16:17:10 2019 From: PyTutor at DancesWithMice.info (David L Neil) Date: Sat, 24 Aug 2019 08:17:10 +1200 Subject: [Tutor] Fwd: Mailing list chaos. In-Reply-To: <23db56a3-54da-be13-a2d8-e4bbbd577819@yahoo.co.uk> References: <7e8203e1-4db0-f3cd-4d05-646145099da1@yahoo.co.uk> <23db56a3-54da-be13-a2d8-e4bbbd577819@yahoo.co.uk> Message-ID: On 24/08/19 6:15 AM, Alan Gauld via Tutor wrote: > Resending, because it didn't seem to get through first time... True! ... > Like everyone else I've been un-subscribed and now re-subscribed > to the tutor list. > > My apologies but I had no notice that this would happen. > As I understand it the issue was a server wide problem affecting > all Python lists which was traced to an issue on the tutor list > but they ad no way to narrow it down to which members configs > were at fault. > > So they took the draconian decision to unsubscribe everyone and > then re-invite them to join. Without thinking to warn the list > owners first.... > > Apologies. Not your fault. Thanks for all the time you invest in the list! > We are now close to 400 members again, but we were close to 800 > last time I looked. It will be interesting to see how many more > make it back to the fold (and even more interesting to know the > reasons for those who don't!) Might this be a good time to 'advertise' the list? - many questions which appear on the main Python list seem more relevant to this one. (but, perhaps I misunderstand their relative purposes/objectives?) -- Regards =dn From mats at wichmann.us Fri Aug 23 16:28:41 2019 From: mats at wichmann.us (Mats Wichmann) Date: Fri, 23 Aug 2019 14:28:41 -0600 Subject: [Tutor] Fwd: Mailing list chaos. In-Reply-To: References: <7e8203e1-4db0-f3cd-4d05-646145099da1@yahoo.co.uk> <23db56a3-54da-be13-a2d8-e4bbbd577819@yahoo.co.uk> Message-ID: <1147de2c-4051-0f44-b382-69d054ecc6c9@wichmann.us> On 8/23/19 2:17 PM, David L Neil wrote: > Might this be a good time to 'advertise' the list? - many questions > which appear on the main Python list seem more relevant to this one. > (but, perhaps I misunderstand their relative purposes/objectives?) > There's also a 'help' list. I don't actually know what goes on there, as I've tried to sign up a few times and never gotten a response. Not sure if there's overlap or if they're truly distinct purposes. From david at graniteweb.com Fri Aug 23 16:50:32 2019 From: david at graniteweb.com (David Rock) Date: Fri, 23 Aug 2019 15:50:32 -0500 Subject: [Tutor] Fwd: Mailing list chaos. In-Reply-To: References: <7e8203e1-4db0-f3cd-4d05-646145099da1@yahoo.co.uk> <23db56a3-54da-be13-a2d8-e4bbbd577819@yahoo.co.uk> Message-ID: <653A957B-168E-4DBB-8334-31C17B497454@graniteweb.com> > On Aug 23, 2019, at 15:17, David L Neil wrote: > > Might this be a good time to 'advertise' the list? - many questions which appear on the main Python list seem more relevant to this one. > (but, perhaps I misunderstand their relative purposes/objectives?) I?m actually planning to do exactly that. My daughter is taking a Computer Programming class in High School this year, and they are using Python 3 and PyCharm. Seems like as good a group as any to make aware other external learning resources exist. :-) ? David Rock david at graniteweb.com From PyTutor at DancesWithMice.info Fri Aug 23 17:44:56 2019 From: PyTutor at DancesWithMice.info (David L Neil) Date: Sat, 24 Aug 2019 09:44:56 +1200 Subject: [Tutor] Fwd: Mailing list chaos. In-Reply-To: <653A957B-168E-4DBB-8334-31C17B497454@graniteweb.com> References: <7e8203e1-4db0-f3cd-4d05-646145099da1@yahoo.co.uk> <23db56a3-54da-be13-a2d8-e4bbbd577819@yahoo.co.uk> <653A957B-168E-4DBB-8334-31C17B497454@graniteweb.com> Message-ID: <811075ce-9ccc-2021-a54e-c36d791aa090@DancesWithMice.info> On 24/08/19 8:50 AM, David Rock wrote: > >> On Aug 23, 2019, at 15:17, David L Neil wrote: >> >> Might this be a good time to 'advertise' the list? - many questions which appear on the main Python list seem more relevant to this one. >> (but, perhaps I misunderstand their relative purposes/objectives?) > > I?m actually planning to do exactly that. My daughter is taking a Computer Programming class in High School this year, and they are using Python 3 and PyCharm. Seems like as good a group as any to make aware other external learning resources exist. :-) +1 That said, it is difficult to explain Discussion List Etiquette (even, basic communications skills and politesse) to students who 'just want to know the answer'. eg have been amused to see blogging from the GSoC (Google Summer of Code) recipients appearing in some aggregating sources I frequent. Almost exclusively, the authors assume the reader is fully-aware of the subject of his/her endeavors. I wasn't - but I liked the idea that if I deleted every single one of their posts, my InTray assumed less oppressive proportions! All the best - will be interested to read object-lessons from your observations/participation... -- Regards =dn From david at graniteweb.com Fri Aug 23 17:58:23 2019 From: david at graniteweb.com (David Rock) Date: Fri, 23 Aug 2019 16:58:23 -0500 Subject: [Tutor] Fwd: Mailing list chaos. In-Reply-To: <811075ce-9ccc-2021-a54e-c36d791aa090@DancesWithMice.info> References: <7e8203e1-4db0-f3cd-4d05-646145099da1@yahoo.co.uk> <23db56a3-54da-be13-a2d8-e4bbbd577819@yahoo.co.uk> <653A957B-168E-4DBB-8334-31C17B497454@graniteweb.com> <811075ce-9ccc-2021-a54e-c36d791aa090@DancesWithMice.info> Message-ID: > On Aug 23, 2019, at 16:44, David L Neil wrote: > > On 24/08/19 8:50 AM, David Rock wrote: >>> On Aug 23, 2019, at 15:17, David L Neil wrote: >>> >>> Might this be a good time to 'advertise' the list? - many questions which appear on the main Python list seem more relevant to this one. >>> (but, perhaps I misunderstand their relative purposes/objectives?) >> I?m actually planning to do exactly that. My daughter is taking a Computer Programming class in High School this year, and they are using Python 3 and PyCharm. Seems like as good a group as any to make aware other external learning resources exist. :-) > > +1 > > That said, it is difficult to explain Discussion List Etiquette (even, basic communications skills and politesse) to students who 'just want to know the answer?. That?s true, but it?s also a lesson that needs to be learnt. Better to get them early, rather than let them barge ahead into the world unawares. Tutoring about how to use mailing lists is un unfortunately rare occurrence these days. > All the best - will be interested to read object-lessons from your observations/participation? It may all net for nothing, but it may be positive, too. :-) ? David Rock david at graniteweb.com From PyTutor at DancesWithMice.info Fri Aug 23 18:40:36 2019 From: PyTutor at DancesWithMice.info (David L Neil) Date: Sat, 24 Aug 2019 10:40:36 +1200 Subject: [Tutor] Fwd: Mailing list chaos. In-Reply-To: References: <7e8203e1-4db0-f3cd-4d05-646145099da1@yahoo.co.uk> <23db56a3-54da-be13-a2d8-e4bbbd577819@yahoo.co.uk> <653A957B-168E-4DBB-8334-31C17B497454@graniteweb.com> <811075ce-9ccc-2021-a54e-c36d791aa090@DancesWithMice.info> Message-ID: <478f082d-b5a6-b5ed-9a52-54520be0713a@DancesWithMice.info> On 24/08/19 9:58 AM, David Rock wrote: > >> On Aug 23, 2019, at 16:44, David L Neil wrote: >> >> On 24/08/19 8:50 AM, David Rock wrote: >>>> On Aug 23, 2019, at 15:17, David L Neil wrote: >>>> >>>> Might this be a good time to 'advertise' the list? - many questions which appear on the main Python list seem more relevant to this one. >>>> (but, perhaps I misunderstand their relative purposes/objectives?) >>> I?m actually planning to do exactly that. My daughter is taking a Computer Programming class in High School this year, and they are using Python 3 and PyCharm. Seems like as good a group as any to make aware other external learning resources exist. :-) >> >> +1 >> >> That said, it is difficult to explain Discussion List Etiquette (even, basic communications skills and politesse) to students who 'just want to know the answer?. > > That?s true, but it?s also a lesson that needs to be learnt. Better to get them early, rather than let them barge ahead into the world unawares. Tutoring about how to use mailing lists is un unfortunately rare occurrence these days. Interesting point. Why though (in this context), if these days "social media" is such a corner-stone of young people's lives? (quite aside from the issue of: 'you won't learn if I do your 'homework' for you') How would the conversation start, in-person? As many will attest from personal experience, explaining a problem involves re-assessment, which may actually obviate any enquiry to the Discussion List, eg Empower [Comic] https://www.geeksaresexy.net/2019/08/21/empower-comic/ >> All the best - will be interested to read object-lessons from your observations/participation? > It may all net for nothing, but it may be positive, too. :-) for both of you! -- Regards =dn From Yuanyuan.A.Olsen at HealthPartners.Com Fri Aug 23 18:36:32 2019 From: Yuanyuan.A.Olsen at HealthPartners.Com (Olsen, Avalow Y) Date: Fri, 23 Aug 2019 22:36:32 +0000 Subject: [Tutor] Comment Message-ID: <70e9467014a745db85477518e7dd142c@HPEXCH05.HealthPartners.int> Hi, Is there a mechanism to comment out large blocks of Python code? So far, the only ways I can see of commenting out code are to either start every line with a #, or to enclose the code in triple quotes. Thank you in advance! Ava ________________________________ This e-mail and any files transmitted with it are confidential and are intended solely for the use of the individual or entity to whom they are addressed. If you are not the intended recipient or the individual responsible for delivering the e-mail to the intended recipient, please be advised that you have received this e-mail in error and that any use, dissemination, forwarding, printing, or copying of this e-mail is strictly prohibited. If you have received this communication in error, please return it to the sender immediately and delete the original message and any copy of it from your computer system. If you have any questions concerning this message, please contact the sender. Disclaimer R001.0 From cs at cskk.id.au Fri Aug 23 19:13:45 2019 From: cs at cskk.id.au (Cameron Simpson) Date: Sat, 24 Aug 2019 09:13:45 +1000 Subject: [Tutor] Comment In-Reply-To: <70e9467014a745db85477518e7dd142c@HPEXCH05.HealthPartners.int> References: <70e9467014a745db85477518e7dd142c@HPEXCH05.HealthPartners.int> Message-ID: <20190823231345.GA81067@cskk.homeip.net> On 23Aug2019 22:36, Olsen, Avalow Y wrote: >Is there a mechanism to comment out large blocks of Python code? So >far, the only ways I can see of commenting out code are to either start >every line with a #, or to enclose the code in triple quotes. I sometimes put the code in an "if False:" statement. There isn't a multiline comment syntax, so you need to either comment out individual lines or use a multiple contruct (eg the "if" statement) or your suggestion of the triple quoted string (though that breaks as soon as the enclosed code itself has such a string). Cheers, Cameron Simpson From Richard at Damon-Family.org Fri Aug 23 19:19:05 2019 From: Richard at Damon-Family.org (Richard Damon) Date: Fri, 23 Aug 2019 19:19:05 -0400 Subject: [Tutor] Comment In-Reply-To: <20190823231345.GA81067@cskk.homeip.net> References: <70e9467014a745db85477518e7dd142c@HPEXCH05.HealthPartners.int> <20190823231345.GA81067@cskk.homeip.net> Message-ID: On 8/23/19 7:13 PM, Cameron Simpson wrote: > On 23Aug2019 22:36, Olsen, Avalow Y > wrote: >> Is there a mechanism to comment out large blocks of Python code? So >> far, the only ways I can see of commenting out code are to either >> start every line with a #, or to enclose the code in triple quotes. > > I sometimes put the code in an "if False:" statement. > > There isn't a multiline comment syntax, so you need to either comment > out individual lines or use a multiple contruct (eg the "if" > statement) or your suggestion of the triple quoted string (though that > breaks as soon as the enclosed code itself has such a string). > > Cheers, > Cameron Simpson You can get around almost all of the triple quote issues by always using one style of triple quotes in your code (like always use """?? """) except for commenting out blocks, those use the other form of quotes (''' ''') Unless you actually have strings that contain 3 quotes of the same type in a row, this works. -- Richard Damon From PyTutor at DancesWithMice.info Fri Aug 23 19:19:15 2019 From: PyTutor at DancesWithMice.info (David L Neil) Date: Sat, 24 Aug 2019 11:19:15 +1200 Subject: [Tutor] Comment In-Reply-To: <70e9467014a745db85477518e7dd142c@HPEXCH05.HealthPartners.int> References: <70e9467014a745db85477518e7dd142c@HPEXCH05.HealthPartners.int> Message-ID: On 24/08/19 10:36 AM, Olsen, Avalow Y wrote: > Hi, > > Is there a mechanism to comment out large blocks of Python code? So far, the only ways I can see of commenting out code are to either start every line with a #, or to enclose the code in triple quotes. This question also frustrates me at times! Your two answers are correct. - if you use the triple quotes, beware the inclusion of any existing multi-line comments! - some text-editors (I'm currently using SublimeText) offer a command to prefix '# plus space' to the current line/highlighted lines, which is great for a bulk, temporary removal. What is required, is to take those lines of code "out of scope". So, another technique may be to create a fake class or function - but then the code-block still has to be (bulk) indented... Remember also, that if this code is already a method/function, you could do things the other way around, and duplicate the function: such that the 'copy' only includes the valid lines of code! (Python will ignore the first declaration and only use the second - provided they use the same name) I'll be interested to hear other ideas... -- Regards =dn From eryksun at gmail.com Fri Aug 23 19:23:06 2019 From: eryksun at gmail.com (eryk sun) Date: Fri, 23 Aug 2019 18:23:06 -0500 Subject: [Tutor] Comment In-Reply-To: <70e9467014a745db85477518e7dd142c@HPEXCH05.HealthPartners.int> References: <70e9467014a745db85477518e7dd142c@HPEXCH05.HealthPartners.int> Message-ID: On 8/23/19, Olsen, Avalow Y wrote: > > Is there a mechanism to comment out large blocks of Python code? So far, the > only ways I can see of commenting out code are to either start every line > with a #, or to enclose the code in triple quotes. Note that if a string literal is the first statement of a code block, not counting comments, the compiler will store it as the doc string. It's not an issue if the code block already has a doc string. >>> class A: ... # watch out ... ''' ... def spam(self): pass ... ''' ... >>> A.__doc__ '\n def spam(self): pass\n ' From david at graniteweb.com Fri Aug 23 20:02:26 2019 From: david at graniteweb.com (David Rock) Date: Fri, 23 Aug 2019 19:02:26 -0500 Subject: [Tutor] Fwd: Mailing list chaos. In-Reply-To: <478f082d-b5a6-b5ed-9a52-54520be0713a@DancesWithMice.info> References: <7e8203e1-4db0-f3cd-4d05-646145099da1@yahoo.co.uk> <23db56a3-54da-be13-a2d8-e4bbbd577819@yahoo.co.uk> <653A957B-168E-4DBB-8334-31C17B497454@graniteweb.com> <811075ce-9ccc-2021-a54e-c36d791aa090@DancesWithMice.info> <478f082d-b5a6-b5ed-9a52-54520be0713a@DancesWithMice.info> Message-ID: > On Aug 23, 2019, at 17:40, David L Neil wrote: > > Why though (in this context), if these days "social media" is such a corner-stone of young people's lives? Because ?social media? is often a poor platform for getting the type of assistance found here. You aren?t going to get a discussion of any substance related to topics like python on Snapchat, Instagram or Twitter (FB isn?t mentioned because none of the kids use it). Most social platforms used by teenagers are about sharing snippets of your life, not code discussion. There?s also something to be said for making someone aware of a medium they may not even know exists (mailing lists). It?s as much about broadening their view as it is about anything else. If there?s a list for python, maybe there?s a list for something else of interest. The internet is a lot bigger than the ?hot platform of the day.? Frankly, most of the kids in the class won?t care, but some might. If even one gets benefit from posting here, we?ve done our good deed for the day. Nine years ago, I talked to 3rd, 4th and 5th graders about arduinos. I brought in a little project that made chasing LED patterns and was controllable from a webpage as well as by physical pushbutton. I know most kids thought it was fun, but I also know that at least a couple kids talked about it and expanded their knowledge well into high school. Would they have found that interest without me opening that door for them? maybe; but maybe not, too. It?s a failing on our part to assume someone will find something on their own. It doesn?t hurt to add to someone?s perspective. ? David Rock david at graniteweb.com From PyTutor at DancesWithMice.info Fri Aug 23 20:22:26 2019 From: PyTutor at DancesWithMice.info (David L Neil) Date: Sat, 24 Aug 2019 12:22:26 +1200 Subject: [Tutor] Fwd: Mailing list chaos. In-Reply-To: References: <7e8203e1-4db0-f3cd-4d05-646145099da1@yahoo.co.uk> <23db56a3-54da-be13-a2d8-e4bbbd577819@yahoo.co.uk> <653A957B-168E-4DBB-8334-31C17B497454@graniteweb.com> <811075ce-9ccc-2021-a54e-c36d791aa090@DancesWithMice.info> <478f082d-b5a6-b5ed-9a52-54520be0713a@DancesWithMice.info> Message-ID: <547abaaf-339b-964c-cef1-5ad7aa937434@DancesWithMice.info> On 24/08/19 12:02 PM, David Rock wrote: > >> On Aug 23, 2019, at 17:40, David L Neil wrote: >> >> Why though (in this context), if these days "social media" is such a corner-stone of young people's lives? > > Because ?social media? is often a poor platform for getting the type of assistance found here. You aren?t going to get a discussion of any substance related to topics like python on Snapchat, Instagram or Twitter (FB isn?t mentioned because none of the kids use it). Most social platforms used by teenagers are about sharing snippets of your life, not code discussion. You're educating me: I thought (in addition) that they were asking each other 'how did you tackle the xyz homework problem?' or even working more collaboratively (individual learning being a function of education in 'my day' but no longer in this ?brave new world). > There?s also something to be said for making someone aware of a medium they may not even know exists (mailing lists). It?s as much about broadening their view as it is about anything else. If there?s a list for python, maybe there?s a list for something else of interest. The internet is a lot bigger than the ?hot platform of the day.? +1 > Frankly, most of the kids in the class won?t care, but some might. If even one gets benefit from posting here, we?ve done our good deed for the day. Nine years ago, I talked to 3rd, 4th and 5th graders about arduinos. I brought in a little project that made chasing LED patterns and was controllable from a webpage as well as by physical pushbutton. I know most kids thought it was fun, but I also know that at least a couple kids talked about it and expanded their knowledge well into high school. Would they have found that interest without me opening that door for them? maybe; but maybe not, too. It?s a failing on our part to assume someone will find something on their own. It doesn?t hurt to add to someone?s perspective. Agreed - a computer (or more likely, an "accounting machine") donated to our high school, that the staff had neither the time, nor supposedly, the ability, to 'get working'; was exactly such a challenge/interest/nascent career for me! Yes, you are correct, the older media, eg email, discussions lists, etc; are unknown to most youngsters. So, agree with the resourcing ideal too. However, just as there are social mores on 'social media' there is a form of expected/acceptable behavior on Discussion Lists. That is worth discussing, because like any other avenue, expectations should be 'managed' to avoid any form of de-motivating 'blow-back'. (to say nothing of the courtesy of asking someone to give-up his/her free-time to assist). NB I can't say I've ever done this 'live' with a group of trainees. However, we do have such included on the 'Admin pages' for our on-line courses and their 'boards' - sadly, evidence suggests that trainees don't read these pages/take it in. So...! Disclaimer: such courses are not in "Python". -- Regards =dn From david at graniteweb.com Fri Aug 23 20:48:01 2019 From: david at graniteweb.com (David Rock) Date: Fri, 23 Aug 2019 19:48:01 -0500 Subject: [Tutor] Fwd: Mailing list chaos. In-Reply-To: <547abaaf-339b-964c-cef1-5ad7aa937434@DancesWithMice.info> References: <7e8203e1-4db0-f3cd-4d05-646145099da1@yahoo.co.uk> <23db56a3-54da-be13-a2d8-e4bbbd577819@yahoo.co.uk> <653A957B-168E-4DBB-8334-31C17B497454@graniteweb.com> <811075ce-9ccc-2021-a54e-c36d791aa090@DancesWithMice.info> <478f082d-b5a6-b5ed-9a52-54520be0713a@DancesWithMice.info> <547abaaf-339b-964c-cef1-5ad7aa937434@DancesWithMice.info> Message-ID: > On Aug 23, 2019, at 19:22, David L Neil wrote: > > On 24/08/19 12:02 PM, David Rock wrote: >>> On Aug 23, 2019, at 17:40, David L Neil wrote: >>> >>> Why though (in this context), if these days "social media" is such a corner-stone of young people's lives? >> Because ?social media? is often a poor platform for getting the type of assistance found here. You aren?t going to get a discussion of any substance related to topics like python on Snapchat, Instagram or Twitter (FB isn?t mentioned because none of the kids use it). Most social platforms used by teenagers are about sharing snippets of your life, not code discussion. > > You're educating me: I thought (in addition) that they were asking each other 'how did you tackle the xyz homework problem?' or even working more collaboratively (individual learning being a function of education in 'my day' but no longer in this ?brave new world). More often what I see, unfortunately, is the last-minute panic ?what?s the answer?? in that context. There are tools in place to catch and discourage that level of ?sharing,? but that?s much more common than actual teamwork. One thing in the syllabus that I think is a great idea is teaming up to do a project. Loosely speaking, they will be expected to pair up and write ?a game? using Python as the final project. I haven?t asked the exact parameters yet (standard library tools only, pygame, other, etc), but the idea they will have enough at the end of the course to do this is heartening. Working on code in a team is a skill many people doing it on their own never get to try. ? David Rock david at graniteweb.com From beachkidken at gmail.com Fri Aug 23 20:49:20 2019 From: beachkidken at gmail.com (Ken Green) Date: Fri, 23 Aug 2019 20:49:20 -0400 Subject: [Tutor] Easier way to use 2to3? Message-ID: It took me a while to figure out how to do a 2to3 as shown in several examples I seen, to wit: While in command line mode of my Ubuntu 18.04, I did the following in a separate directory. Python 2 program: # sample.py print "What a wonderful day in my neighborhood." print print "Yes, it is a wonderful day." Resulted in: What a wonderful day in my neighborhood. Yes, it is a wonderful day. ------------------ (program exited with code: 0) Press return to continue When I ran 2to3 sample.py in a Python3 directory, I get the following: ken at kengreen:~/Python3$ 2to3 sample.py RefactoringTool: Skipping optional fixer: buffer RefactoringTool: Skipping optional fixer: idioms RefactoringTool: Skipping optional fixer: set_literal RefactoringTool: Skipping optional fixer: ws_comma RefactoringTool: Refactored sample.py --- sample.py??? (original) +++ sample.py??? (refactored) @@ -1,6 +1,6 @@ ?# sample.py -print "What a wonderful day in my neighborhood." -print -print "Yes, it is a wonderful day." +print("What a wonderful day in my neighborhood.") +print() +print("Yes, it is a wonderful day.") RefactoringTool: Files that need to be modified: RefactoringTool: sample.py ken at kengreen:~/Python3$ Huh, what? The original program was not changed! I was expecting a changed Python2 program to be compatible with Python3. I ended up making the needed changes line-by-line to my original program. What gives? Changing all of my Python2 programs to be compatible with Python3 will be a headache and it would take into next year to change all. Is there a easier way? On a side note, I have been using Geany v1.32 and it is linked to all of my Python2. To linked to Python3, I have to use Idle instead of Geany as it can only be linked to one Python directory at a time. Thanking this group in advance for any possible solution, thanks. Ken From cs at cskk.id.au Fri Aug 23 21:10:27 2019 From: cs at cskk.id.au (Cameron Simpson) Date: Sat, 24 Aug 2019 11:10:27 +1000 Subject: [Tutor] Easier way to use 2to3? In-Reply-To: References: Message-ID: <20190824011027.GA97681@cskk.homeip.net> On 23Aug2019 20:49, Ken Green wrote: >It took me a while to figure out how to do a 2to3 >as shown in several examples I seen, [...] Documentation beats examples. [...] >When I ran 2to3 sample.py in a Python3 directory, >I get the following: > >ken at kengreen:~/Python3$ 2to3 sample.py [... noise, diff, original file unchanged ...] >Huh, what? The original program was not changed! I was >expecting a changed Python2 program to be compatible with >Python3. I ended up making the needed changes line-by-line >to my original program. What gives? The default mode does no damage to files. But if we ask 2to3 for help: [~]fleet*> 2to3 --help Usage: 2to3 [options] file|dir ... Options: -h, --help show this help message and exit -d, --doctests_only Fix up doctests only -f FIX, --fix=FIX Each FIX specifies a transformation; default: all -j PROCESSES, --processes=PROCESSES Run 2to3 concurrently -x NOFIX, --nofix=NOFIX Prevent a transformation from being run -l, --list-fixes List available transformations -p, --print-function Modify the grammar so that print() is a function -v, --verbose More verbose logging --no-diffs Don't show diffs of the refactoring -w, --write Write back modified files -n, --nobackups Don't write backups for modified files -o OUTPUT_DIR, --output-dir=OUTPUT_DIR Put output files in this directory instead of overwriting the input files. Requires -n. -W, --write-unchanged-files Also write files even if no changes were required (useful with --output-dir); implies -w. --add-suffix=ADD_SUFFIX Append this string to all output filenames. Requires -n if non-empty. ex: --add-suffix='3' will generate .py3 files. So try the -w option. Cheers, Cameron Simpson From ingo at ingoogni.nl Sat Aug 24 04:25:09 2019 From: ingo at ingoogni.nl (ingo) Date: Sat, 24 Aug 2019 10:25:09 +0200 Subject: [Tutor] Fwd: Mailing list chaos. In-Reply-To: <547abaaf-339b-964c-cef1-5ad7aa937434@DancesWithMice.info> References: <7e8203e1-4db0-f3cd-4d05-646145099da1@yahoo.co.uk> <23db56a3-54da-be13-a2d8-e4bbbd577819@yahoo.co.uk> <653A957B-168E-4DBB-8334-31C17B497454@graniteweb.com> <811075ce-9ccc-2021-a54e-c36d791aa090@DancesWithMice.info> <478f082d-b5a6-b5ed-9a52-54520be0713a@DancesWithMice.info> <547abaaf-339b-964c-cef1-5ad7aa937434@DancesWithMice.info> Message-ID: <2946b449-9a62-6f02-28fe-f929b4afb94e@ingoogni.nl> WhatsApp class groups and chat channels of the games they play are used for that, at least that what I see my son does. Ingo On 24-8-2019 02:22, David L Neil wrote: > You're educating me: I thought (in addition) that they were asking each > other 'how did you tackle the xyz homework problem?' or even working > more collaboratively (individual learning being a function of education > in 'my day' but no longer in this ?brave new world). From ingo at ingoogni.nl Sat Aug 24 05:31:31 2019 From: ingo at ingoogni.nl (ingo) Date: Sat, 24 Aug 2019 11:31:31 +0200 Subject: [Tutor] venv questions Message-ID: In the past I managed to modify one or more files to make the venv 'set up' process to also copy the files needed to run IDLE within the environment to the Scripts directory. I can't figure out any more how to do this (on win10). A nudge in the right direction to accomplish this again would be welcome. When creating an environment (win10) there always is an empty directory "Include", what is its use? TIA, Ingo From david at lowryduda.com Sat Aug 24 09:04:22 2019 From: david at lowryduda.com (David Lowry-Duda) Date: Sat, 24 Aug 2019 09:04:22 -0400 Subject: [Tutor] Comment In-Reply-To: <70e9467014a745db85477518e7dd142c@HPEXCH05.HealthPartners.int> References: <70e9467014a745db85477518e7dd142c@HPEXCH05.HealthPartners.int> Message-ID: <20190824130422.GA3225@mail.lowryduda.com> > Is there a mechanism to comment out large blocks of Python code? So > far, the only ways I can see of commenting out code are to either > start every line with a #, or to enclose the code in triple quotes. The two methods you describe (# and """""") are the two mechanical ways of commenting out large blocks of code in python. In practice, this is a bit separate from how one should approach it within one's editor. Each sufficiently advanced editor should have a mechanism to comment/uncomment many lines for you. For instance, in pycharm one can use CTRL+SHIFT+/ to comment out a block of code (or navigate to some menu). In vim, one can use vim-commentary or enter block mode with CTRL-v, highlight the lines you want to be commented, and then I# to comment them. (I'm sure other nice editors out there have this functionality too, but I only use these). > Thank you in advance! Good luck! DLD From beachkidken at gmail.com Sat Aug 24 09:07:58 2019 From: beachkidken at gmail.com (Ken Green) Date: Sat, 24 Aug 2019 09:07:58 -0400 Subject: [Tutor] Easier way to use 2to3? In-Reply-To: <20190824011027.GA97681@cskk.homeip.net> References: <20190824011027.GA97681@cskk.homeip.net> Message-ID: <8979ebca-f2dd-798f-e3db-23b151ae6307@gmail.com> On 8/23/19 9:10 PM, Cameron Simpson wrote: > On 23Aug2019 20:49, Ken Green wrote: >> It took me a while to figure out how to do a 2to3 >> as shown in several examples I seen, [...] > > Documentation beats examples. > > [...] >> When I ran 2to3 sample.py in a Python3 directory, >> I get the following: >> >> ken at kengreen:~/Python3$ 2to3 sample.py > [... noise, diff, original file unchanged ...] >> Huh, what? The original program was not changed! I was >> expecting a changed Python2 program to be compatible with >> Python3. I ended up making the needed changes line-by-line >> to my original program. What gives? > > The default mode does no damage to files. But if we ask 2to3 for help: > > ?? [~]fleet*> 2to3 --help > ?? Usage: 2to3 [options] file|dir ... > > ?? Options: > ???? -h, --help??????????? show this help message and exit > ???? -d, --doctests_only?? Fix up doctests only > ???? -f FIX, --fix=FIX???? Each FIX specifies a transformation; > default: all > ???? -j PROCESSES, --processes=PROCESSES > ?????????????????????????? Run 2to3 concurrently > ???? -x NOFIX, --nofix=NOFIX > ?????????????????????????? Prevent a transformation from being run > ???? -l, --list-fixes????? List available transformations > ???? -p, --print-function? Modify the grammar so that print() is a > function > ???? -v, --verbose???????? More verbose logging > ???? --no-diffs??????????? Don't show diffs of the refactoring > ???? -w, --write?????????? Write back modified files > ???? -n, --nobackups?????? Don't write backups for modified files > ???? -o OUTPUT_DIR, --output-dir=OUTPUT_DIR > ?????????????????????????? Put output files in this directory instead of > ?????????????????????????? overwriting the input files.? Requires -n. > ???? -W, --write-unchanged-files > ?????????????????????????? Also write files even if no changes were > required > ?????????????????????????? (useful with --output-dir); implies -w. > ???? --add-suffix=ADD_SUFFIX > ?????????????????????????? Append this string to all output > filenames.? Requires > ?????????????????????????? -n if non-empty.? ex: --add-suffix='3' will > generate > ?????????????????????????? .py3 files. > > So try the -w option. > > Cheers, > Cameron Simpson > Thanks ever so much for pointing me in the right direction. Much appreciated. Ken From gerard.blais at gmail.com Sat Aug 24 10:34:22 2019 From: gerard.blais at gmail.com (Gerard Blais) Date: Sat, 24 Aug 2019 10:34:22 -0400 Subject: [Tutor] Comment In-Reply-To: <20190823231345.GA81067@cskk.homeip.net> References: <70e9467014a745db85477518e7dd142c@HPEXCH05.HealthPartners.int> <20190823231345.GA81067@cskk.homeip.net> Message-ID: you can enclose a """" literal inside a pair of triple single quotes. ,,, comment with embedded """ '''' and vice versa. On Fri, Aug 23, 2019, 19:14 Cameron Simpson wrote: > On 23Aug2019 22:36, Olsen, Avalow Y > wrote: > >Is there a mechanism to comment out large blocks of Python code? So > >far, the only ways I can see of commenting out code are to either start > >every line with a #, or to enclose the code in triple quotes. > > I sometimes put the code in an "if False:" statement. > > There isn't a multiline comment syntax, so you need to either comment > out individual lines or use a multiple contruct (eg the "if" statement) > or your suggestion of the triple quoted string (though that breaks as > soon as the enclosed code itself has such a string). > > Cheers, > Cameron Simpson > _______________________________________________ > Tutor maillist - Tutor at python.org > To unsubscribe or change subscription options: > https://mail.python.org/mailman/listinfo/tutor > From mats at wichmann.us Sat Aug 24 14:41:41 2019 From: mats at wichmann.us (Mats Wichmann) Date: Sat, 24 Aug 2019 12:41:41 -0600 Subject: [Tutor] venv questions In-Reply-To: References: Message-ID: <2ce8e210-fef5-6c6f-2a8d-244d69449ea3@wichmann.us> On 8/24/19 3:31 AM, ingo wrote: > In the past I managed to modify one or more files to make the venv 'set > up' process to also copy the files needed to run IDLE within the > environment to the Scripts directory. I can't figure out any more how to > do this (on win10). A nudge in the right direction to accomplish this > again would be welcome. not sure which you mean... I haven't really switched to using the venv system yet, continue to be happy with virtualenvs created by the "pyenv" system, and I'm still having to support some 2.7 stuff - venv is not for 2.7. venv reads a config file, pyvenv.cfg, which is created in the venv directory and describes things about it, and which is searched for by Pythons since 3.3 (I think) to make sure it gets initialized correctly upon startup. So maybe you meant that... the docu for venv describes a scheme for writing a script which specializes venv.EnvBuilder to control setup so certain things are sure to be installed, is that what you're thinking of? https://docs.python.org/3/library/venv.html#an-example-of-extending-envbuilder > > When creating an environment (win10) there always is an empty directory > "Include", what is its use? > include is for C-language header files which would be used if compiling an extension module. those need to precisely match the Python version they're targeted to, which is why they would be grouped with a particular environment (not sure why empty... I "don't do Windows" as a rule :) From PyTutor at DancesWithMice.info Sat Aug 24 18:29:26 2019 From: PyTutor at DancesWithMice.info (David L Neil) Date: Sun, 25 Aug 2019 10:29:26 +1200 Subject: [Tutor] Fwd: Mailing list chaos. In-Reply-To: <2946b449-9a62-6f02-28fe-f929b4afb94e@ingoogni.nl> References: <7e8203e1-4db0-f3cd-4d05-646145099da1@yahoo.co.uk> <23db56a3-54da-be13-a2d8-e4bbbd577819@yahoo.co.uk> <653A957B-168E-4DBB-8334-31C17B497454@graniteweb.com> <811075ce-9ccc-2021-a54e-c36d791aa090@DancesWithMice.info> <478f082d-b5a6-b5ed-9a52-54520be0713a@DancesWithMice.info> <547abaaf-339b-964c-cef1-5ad7aa937434@DancesWithMice.info> <2946b449-9a62-6f02-28fe-f929b4afb94e@ingoogni.nl> Message-ID: <85d8742e-084d-495e-9a4d-ed0ca4a3f28e@DancesWithMice.info> For the benefit of those of us who don't use WhatsApp (or any other Facebook-ish medium): is a "class group" literally his own school-class or does it comprise all the people in NL/the world attempting that subject/topic? The next question may then be: are students likely to gain greater advantage there, or from 'here'? Which may also lead to the thought: are they better staying in a 'student community' (my imagination of "class group") or being exposed to the views, advice, and work-habits of professionals (who are members here)? (for example, some answers are likely far more precise, or cover highly technical/business-oriented scenarios, beyond the typical 'toy examples' of high school) NB I'm not pursuing any 'agenda' to ban/remove 'school students' from this list, in asking such questions - I work with adults and have no real understanding of how school-kids are running their lives these days, so appreciate your observations! On 24/08/19 8:25 PM, ingo wrote: > WhatsApp class groups and chat channels of the games they play are used > for that, at least that what I see my son does. > > Ingo > > On 24-8-2019 02:22, David L Neil wrote: >> You're educating me: I thought (in addition) that they were asking each >> other 'how did you tackle the xyz homework problem?' or even working >> more collaboratively (individual learning being a function of education >> in 'my day' but no longer in this ?brave new world). > _______________________________________________ > Tutor maillist - Tutor at python.org > To unsubscribe or change subscription options: > https://mail.python.org/mailman/listinfo/tutor > -- Regards =dn From bgailer at gmail.com Sat Aug 24 20:39:55 2019 From: bgailer at gmail.com (bob gailer) Date: Sat, 24 Aug 2019 20:39:55 -0400 Subject: [Tutor] seeking design pattern Message-ID: <06182aa6-037c-9af0-015f-e3f47aaa4da8@gmail.com> I desire to import some functions form a module and give them access to names in the main module namespace. Example: m.py --------------- def a(): ??? print(s) interactive interpreter --------------- >>> s = 3 >>> from m import a >>> a() Traceback (most recent call last): ? File "", line 1, in ? File "N:\m.py", line 2, in a ??? print(s) NameError: name 's' is not defined My expectation was that the function, having been imported into the main module, would access variables in the main module, but alas, not the case. Is there a workaround? ( easy, "clean", pythonic) -- Bob Gailer From david at graniteweb.com Sat Aug 24 20:58:05 2019 From: david at graniteweb.com (David Rock) Date: Sat, 24 Aug 2019 19:58:05 -0500 Subject: [Tutor] Fwd: Mailing list chaos. In-Reply-To: <85d8742e-084d-495e-9a4d-ed0ca4a3f28e@DancesWithMice.info> References: <7e8203e1-4db0-f3cd-4d05-646145099da1@yahoo.co.uk> <23db56a3-54da-be13-a2d8-e4bbbd577819@yahoo.co.uk> <653A957B-168E-4DBB-8334-31C17B497454@graniteweb.com> <811075ce-9ccc-2021-a54e-c36d791aa090@DancesWithMice.info> <478f082d-b5a6-b5ed-9a52-54520be0713a@DancesWithMice.info> <547abaaf-339b-964c-cef1-5ad7aa937434@DancesWithMice.info> <2946b449-9a62-6f02-28fe-f929b4afb94e@ingoogni.nl> <85d8742e-084d-495e-9a4d-ed0ca4a3f28e@DancesWithMice.info> Message-ID: <0097F7C7-1E03-4343-8584-53C30AF08FA1@graniteweb.com> > On Aug 24, 2019, at 17:29, David L Neil wrote: > > For the benefit of those of us who don't use WhatsApp (or any other Facebook-ish medium): is a "class group" literally his own school-class or does it comprise all the people in NL/the world attempting that subject/topic? These are mostly driven by the students themselves. They are not formal (or sanctioned) in any way related to the class itself. It?s usually just the kids i the class making a group so they can gripe to each other about the class (and beg for answers). There are a couple cases where the teacher will put together something using other tools (The ?remind? App is used a lot for this), but it?s usually just a place to post date reminders, not have interactive discussions. > The next question may then be: are students likely to gain greater advantage there, or from 'here?? No. As mentioned, it?s driven typically by the students, limited to their class only, and has no senior input, guidance. > Which may also lead to the thought: are they better staying in a 'student community' (my imagination of "class group") or being exposed to the views, advice, and work-habits of professionals (who are members here)? If that?s what the ?class group? was, then possibly yes. The fact that?s not what it is; no. ? David Rock david at graniteweb.com From cs at cskk.id.au Sat Aug 24 21:47:08 2019 From: cs at cskk.id.au (Cameron Simpson) Date: Sun, 25 Aug 2019 11:47:08 +1000 Subject: [Tutor] seeking design pattern In-Reply-To: <06182aa6-037c-9af0-015f-e3f47aaa4da8@gmail.com> References: <06182aa6-037c-9af0-015f-e3f47aaa4da8@gmail.com> Message-ID: <20190825014708.GA85707@cskk.homeip.net> On 24Aug2019 20:39, bob gailer wrote: >I desire to import some functions form a module and give them access >to names in the main module namespace. Example: > >m.py --------------- > >def a(): >??? print(s) > >interactive interpreter --------------- >>>> s = 3 >>>> from m import a >>>> a() >Traceback (most recent call last): >? File "", line 1, in >? File "N:\m.py", line 2, in a >??? print(s) >NameError: name 's' is not defined > >My expectation was that the function, having been imported into the >main module, would access variables in the main module, but alas, not >the case. No, that would be a disaster. >Is there a workaround? ( easy, "clean", pythonic) m.py def a(s): print(s) s = 3 from m import a a(s) The interpret name "s" is distinct from the function parameter name "s". By passing a(s), the object referenced by the name "s" in the interactive scope is presented (coindidentally) as the name "s" in the function "a". Can you describe why you would want the original behaviour you describe? Bear in mind that most Python names can be rebound. So you can rebind "print" to a function of your own choosing. Should a() also honour that? Try to provide something you want to do in the real world which would benefit from this name behaviour. Cheers, Cameron Simpson From Richard at Damon-Family.org Sat Aug 24 21:47:02 2019 From: Richard at Damon-Family.org (Richard Damon) Date: Sat, 24 Aug 2019 18:47:02 -0700 Subject: [Tutor] seeking design pattern In-Reply-To: <06182aa6-037c-9af0-015f-e3f47aaa4da8@gmail.com> References: <06182aa6-037c-9af0-015f-e3f47aaa4da8@gmail.com> Message-ID: <327b0acb-a87a-dfc0-7f12-4b61f5c66593@Damon-Family.org> On 8/24/19 5:39 PM, bob gailer wrote: > I desire to import some functions form a module and give them access > to names in the main module namespace. Example: > > m.py --------------- > > def a(): > ??? print(s) > > interactive interpreter --------------- > >>> s = 3 > >>> from m import a > >>> a() > Traceback (most recent call last): > ? File "", line 1, in > ? File "N:\m.py", line 2, in a > ??? print(s) > NameError: name 's' is not defined > > My expectation was that the function, having been imported into the > main module, would access variables in the main module, but alas, not > the case. > > Is there a workaround? ( easy, "clean", pythonic) > > In python, importing a module doesn't merge the namespaces, but brings in copies of the definitions so they can be accessed without explicit mentioning scopes. One key thing to think about, several modules might have imported a given module, so having that import change where things that are accessed in that module get found would be complicated. One way to do something like what you are asking would be in the calling module, after the import of m, to write into that modules namespace with something like m.s = 3 I think that would then let things in m see the new value of s in their scope. -- Richard Damon From mike_barnett at hotmail.com Sat Aug 24 19:04:03 2019 From: mike_barnett at hotmail.com (Mike Barnett) Date: Sat, 24 Aug 2019 23:04:03 +0000 Subject: [Tutor] The Reading Documentation problem Message-ID: I've noted what I find to be a disturbing trend with younger students that use a package that I released last year. This package has a LOT of documentation, and it's needed because there are a lot of different classes, functions, etc. It's really easy reading and you don't have to read the docs except when you run into trouble or something new about it that you're learning. It's not a difficult package to learn and use, even with little reading. There are a lot of materials supplied along with the User Manual... a Cookbook, a lot of demo programs. The trend I see is an unwillingness to do a search through the documentation when there's a problem and instead of "researching" their problem some of these youngsters post, or blast post across multiple sites, a request for help. Often the information could have been found by searching online documentation much quicker and with a LOT less work than typing up a Stack Overflow post. Reading the documentation is an essential skill to grow knowledge. I get googling for help. I do it from time to time too. But when there's documentation available, you can't go wrong generally speaking by looking at it. When I learned Computer Science I had no choice. There was no internet. I remember when 2 foot long groups of manuals were placed on tables for easy access in computer labs in universities I attended. I feel like it made me a better programmer. I would like to request that teachers really drill in the importance of reading documentation, and while on the topic, writing documentation is super-important too. I understand the super-fast-pace of learning and doing that we're going through in technology, and the desire for instant learning or instant answers. I get that there are some great resources on the net. But they shouldn't be used in place of the written word, published often by the developers of the code. The problem with getting info online from Reddit, Stack Overflow, forums, is that sometimes, or for my not yet well-known package, all the time, the information is wrong. Reddit in particular is scary as I watch person after person respond to questions when they don't know much or anything about the topic. It's as if answering first gets them something. I dunno if it's an ego thing or what. I just know what I see and what I see time and time again are people without actual education and knowledge answering questions with the authority & confidence of someone that does know the topic. It's nearly impossible sometimes to tell the difference between someone completely guessing and someone highly educated just by reading the text posted. Sorry this is so long, but it's a real problem I'm witnessing and I'm wondering if it's only a certain portion of the programming world (self-taught people) or the internet-generation in general does this regardless of educational training. Thank you for your time From alan.gauld at btinternet.com Sun Aug 25 03:48:10 2019 From: alan.gauld at btinternet.com (Alan Gauld) Date: Sun, 25 Aug 2019 08:48:10 +0100 Subject: [Tutor] seeking design pattern In-Reply-To: <06182aa6-037c-9af0-015f-e3f47aaa4da8@gmail.com> References: <06182aa6-037c-9af0-015f-e3f47aaa4da8@gmail.com> Message-ID: On 25/08/2019 01:39, bob gailer wrote: > >>> s = 3 This defines a name s in the current namespace > >>> from m import a This imports the *name* a from the module m. a refers to a function object in the module m. The function object remains in the module namespace, it cannot be imported. import only makes the name visible. Understanding the difference between names and values is absolutely critical in Python. > >>> a() > Traceback (most recent call last): > ? File "", line 1, in > ? File "N:\m.py", line 2, in a > ??? print(s) > NameError: name 's' is not defined This calls the function in module m. And the function tries to find a name called s but cannot for there is no s defined in m. > My expectation was that the function, having been imported into the main You do not import the function, you import the name. The name is still a reference to the function inside the module. This is why relying on global variables is nearly always a bad idea. Instead pass the value as an argument to the function (which must of course be defined to have a parameter): def a(s) print(s) a(s) > Is there a workaround? ( easy, "clean", pythonic) There is a workaround for situations where you are not in control of the module code. You could create your own s inside m: import m m.s = 3 m.a() Now a() can see an s inside m. But that is horrible and the wrong thing to do unless you really have to. And you need to remember to change m.s everytime you change s if you want to call a() in the future. Please avoid that if you possibly can. The parameter/argument mechanism is there for a reason, use it. -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos From mhysnm1964 at gmail.com Sun Aug 25 04:05:42 2019 From: mhysnm1964 at gmail.com (mhysnm1964 at gmail.com) Date: Sun, 25 Aug 2019 18:05:42 +1000 Subject: [Tutor] The Reading Documentation problem In-Reply-To: References: Message-ID: <000401d55b1b$e6141ca0$b23c55e0$@gmail.com> Mike, It is a combination of poor documentation where the author does not provide clear examples or explanation all the way to where someone is learning and do not understand some of the terminology. Sometimes the developer is not the best person to right the information on the module. This is why we have technical writers. ? But your right. I don't know how many so call developers I have spoken to over the years of doing my work who do not understand some core concepts in the web space. You ask them why did you do it this way, and they have copied it from somewhere as it addressed their needs without understanding the code fully. I don't know if it will get any better due to some of the tools available making it easier to write code without knowledge. Reading technical information is important. -----Original Message----- From: Tutor On Behalf Of Mike Barnett Sent: Sunday, 25 August 2019 9:04 AM To: tutor at python.org Subject: [Tutor] The Reading Documentation problem I've noted what I find to be a disturbing trend with younger students that use a package that I released last year. This package has a LOT of documentation, and it's needed because there are a lot of different classes, functions, etc. It's really easy reading and you don't have to read the docs except when you run into trouble or something new about it that you're learning. It's not a difficult package to learn and use, even with little reading. There are a lot of materials supplied along with the User Manual... a Cookbook, a lot of demo programs. The trend I see is an unwillingness to do a search through the documentation when there's a problem and instead of "researching" their problem some of these youngsters post, or blast post across multiple sites, a request for help. Often the information could have been found by searching online documentation much quicker and with a LOT less work than typing up a Stack Overflow post. Reading the documentation is an essential skill to grow knowledge. I get googling for help. I do it from time to time too. But when there's documentation available, you can't go wrong generally speaking by looking at it. When I learned Computer Science I had no choice. There was no internet. I remember when 2 foot long groups of manuals were placed on tables for easy access in computer labs in universities I attended. I feel like it made me a better programmer. I would like to request that teachers really drill in the importance of reading documentation, and while on the topic, writing documentation is super-important too. I understand the super-fast-pace of learning and doing that we're going through in technology, and the desire for instant learning or instant answers. I get that there are some great resources on the net. But they shouldn't be used in place of the written word, published often by the developers of the code. The problem with getting info online from Reddit, Stack Overflow, forums, is that sometimes, or for my not yet well-known package, all the time, the information is wrong. Reddit in particular is scary as I watch person after person respond to questions when they don't know much or anything about the topic. It's as if answering first gets them something. I dunno if it's an ego thing or what. I just know what I see and what I see time and time again are people without actual education and knowledge answering questions with the authority & confidence of someone that does know the topic. It's nearly impossible sometimes to tell the difference between someone completely guessing and someone highly educated just by reading the text posted. Sorry this is so long, but it's a real problem I'm witnessing and I'm wondering if it's only a certain portion of the programming world (self-taught people) or the internet-generation in general does this regardless of educational training. Thank you for your time _______________________________________________ Tutor maillist - Tutor at python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor From PyTutor at DancesWithMice.info Sun Aug 25 04:31:35 2019 From: PyTutor at DancesWithMice.info (David L Neil) Date: Sun, 25 Aug 2019 20:31:35 +1200 Subject: [Tutor] The Reading Documentation problem In-Reply-To: References: Message-ID: <44774a09-ee15-9b8d-37fb-779b36b667e5@DancesWithMice.info> On 25/08/19 11:04 AM, Mike Barnett wrote: > I've noted what I find to be a disturbing trend with younger students that use a package that I released last year. This package has a LOT of documentation, and it's needed because there are a lot of different classes, functions, etc. It's really easy reading and you don't have to read the docs except when you run into trouble or something new about it that you're learning. It's not a difficult package to learn and use, even with little reading. ... > Sorry this is so long, but it's a real problem I'm witnessing and I'm wondering if it's only a certain portion of the programming world (self-taught people) or the internet-generation in general does this regardless of educational training. One good rant deserves another:- Today's pace of life - I want it now! The general rule is that documentation is weak, out-of-date, or non-existent. The rationale for which seems to be: read the source-code. So, many people are self-taught and appear to do so without following any form of structure or syllabus. Training courses are expensive and thus necessarily short. Many believe that 'boot-camps' are a more efficient way to learn than 3?4 year university programmes. The average length-of-career in IT is quite short. Assuming that course-applicants have realised this, surely the training lead-up should reflect same? Employers want someone now, not in three-years' time/I need a new (highly-paid) job now, not in three-years' time. How many people can distinguish between a "coder" and a "programmer" - particularly employers/clients/HR depts. Why spend time learning when StackOverflow is but a click away? Why spend time thinking when someone else has already coded it/something (which appears to be) similar? Governments (world-wide) are tending towards the employers' preference for "training", as distinct from the life-long preparation of "education". This also a feature of "the gig economy", and the expectation that one can inter-change individuals, as long as the job gets done. Similarly, I see (again, widely-spread across the 'western world') a lack of respect for academia ("all brains but no practical use"), and thus the claim that renamed polytechnics/technical colleges/community colleges produce 'just as good' a graduate. Cash now/soon, or no cash until later - who is good at "delayed gratification"? It's called a ?brave, new world... -- Regards =dn From ingo at ingoogni.nl Sun Aug 25 08:00:51 2019 From: ingo at ingoogni.nl (ingo) Date: Sun, 25 Aug 2019 14:00:51 +0200 Subject: [Tutor] venv questions In-Reply-To: <2ce8e210-fef5-6c6f-2a8d-244d69449ea3@wichmann.us> References: <2ce8e210-fef5-6c6f-2a8d-244d69449ea3@wichmann.us> Message-ID: <195b5d91-0f3e-1290-81a3-d749f07ec7d8@ingoogni.nl> On 24-8-2019 20:41, Mats Wichmann wrote: > include is for C-language header files which would be used if compiling > an extension module. those need to precisely match the Python version > they're targeted to, which is why they would be grouped with a > particular environment Thanks Matt, Ingo From bgailer at gmail.com Sun Aug 25 09:14:07 2019 From: bgailer at gmail.com (bob gailer) Date: Sun, 25 Aug 2019 09:14:07 -0400 Subject: [Tutor] seeking design pattern In-Reply-To: <20190825014708.GA85707@cskk.homeip.net> References: <06182aa6-037c-9af0-015f-e3f47aaa4da8@gmail.com> <20190825014708.GA85707@cskk.homeip.net> Message-ID: <06b76cbb-847b-7866-9b10-67053566b376@gmail.com> On 8/24/2019 9:47 PM, Cameron Simpson wrote: > > Can you describe why you would want the original behaviour you describe? > > Bear in mind that most Python names can be rebound. So you can rebind > "print" to a function of your own choosing. Should a() also honour that? > > Try to provide something you want to do in the real world which would > benefit from this name behaviour. Thanks for your reply. My associate and I are co-authoring a project. I am developing the main program; he is writing arduino drivers. In the main program I have several functions (e.g. log()) that are called from main program code and from the arduino drivers. to keep a clean separation of code his drivers are in a separate module that is imported by the main program. So we have a need to access some of the functions I've written from both my code and his, which reside in 2 different modules. -- Bob Gailer From mike_barnett at hotmail.com Sun Aug 25 06:38:59 2019 From: mike_barnett at hotmail.com (Mike Barnett) Date: Sun, 25 Aug 2019 10:38:59 +0000 Subject: [Tutor] The Reading Documentation problem In-Reply-To: <44774a09-ee15-9b8d-37fb-779b36b667e5@DancesWithMice.info> References: <44774a09-ee15-9b8d-37fb-779b36b667e5@DancesWithMice.info> Message-ID: I had hoped not to sound too rant-like, but alas guess it does come off sounding like that. It's frustration that maybe leaked through. I honestly don't think, in this particular case, that it's a documentation quality, lack of, or outdated. I've heard from numerous users that it was the documentation that drew them in and kept them using it. I come from an era where documentation was paramount and engineers were expected to write technical docs. Technical writing and lack of clear examples is not my problem. I don't say that to be arrogant or defensive, but rather to say that I'm too much of a "continuous process improvement" person to let bad or non-existent documentation to be a problem. I come out and ask the people that clearly didn't read the docs what kinds of changes I could make that would have helped them. Most of the time that answer is "nothing, I just didn't take the time to read them... I'll do that next time". I'm speaking of a phenomenon and I think you've done a great job Dave of adding some color and detail to the conversation that is helpful. There IS a "I want it now" culture. I see the "how can I become employable in 1 year" questions on Reddit every other day. The reason I wrote to this list is that I assumed it was monitored by teachers, tutors, those that are further upstream than me. It's a request for help I suppose I'm asking for. But, now that I think about it, the people I struggle with getting to read the docs are not in touch with these educators. I sometimes send private messages to folks asking for super-quick learning, giving them my opinion of a path they could take or stressing this or that part of what they are doing that they are perhaps lacking a little. The responses are often surprising. They're overwhelmed with gratitude, saying that no one has taken the time in their past to teach them this or that part of being an employee or learning. Thanks for the frank conversation on this without it turning into finger pointing. -----Original Message----- From: Tutor On Behalf Of David L Neil Sent: Sunday, August 25, 2019 4:32 AM To: tutor at python.org Subject: Re: [Tutor] The Reading Documentation problem On 25/08/19 11:04 AM, Mike Barnett wrote: > I've noted what I find to be a disturbing trend with younger students that use a package that I released last year. This package has a LOT of documentation, and it's needed because there are a lot of different classes, functions, etc. It's really easy reading and you don't have to read the docs except when you run into trouble or something new about it that you're learning. It's not a difficult package to learn and use, even with little reading. ... > Sorry this is so long, but it's a real problem I'm witnessing and I'm wondering if it's only a certain portion of the programming world (self-taught people) or the internet-generation in general does this regardless of educational training. One good rant deserves another:- Today's pace of life - I want it now! The general rule is that documentation is weak, out-of-date, or non-existent. The rationale for which seems to be: read the source-code. So, many people are self-taught and appear to do so without following any form of structure or syllabus. Training courses are expensive and thus necessarily short. Many believe that 'boot-camps' are a more efficient way to learn than 3?4 year university programmes. The average length-of-career in IT is quite short. Assuming that course-applicants have realised this, surely the training lead-up should reflect same? Employers want someone now, not in three-years' time/I need a new (highly-paid) job now, not in three-years' time. How many people can distinguish between a "coder" and a "programmer" - particularly employers/clients/HR depts. Why spend time learning when StackOverflow is but a click away? Why spend time thinking when someone else has already coded it/something (which appears to be) similar? Governments (world-wide) are tending towards the employers' preference for "training", as distinct from the life-long preparation of "education". This also a feature of "the gig economy", and the expectation that one can inter-change individuals, as long as the job gets done. Similarly, I see (again, widely-spread across the 'western world') a lack of respect for academia ("all brains but no practical use"), and thus the claim that renamed polytechnics/technical colleges/community colleges produce 'just as good' a graduate. Cash now/soon, or no cash until later - who is good at "delayed gratification"? It's called a ?brave, new world... -- Regards =dn _______________________________________________ Tutor maillist - Tutor at python.org To unsubscribe or change subscription options: https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmail.python.org%2Fmailman%2Flistinfo%2Ftutor&data=02%7C01%7C%7C0b63e8b0e4bb4c337bf608d72936be73%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C637023187402679526&sdata=M3AnFoKoQzIby0aMLi7a9BCGpecjUW9CjUXHnxBfrBU%3D&reserved=0 From mats at wichmann.us Sun Aug 25 11:26:36 2019 From: mats at wichmann.us (Mats Wichmann) Date: Sun, 25 Aug 2019 09:26:36 -0600 Subject: [Tutor] seeking design pattern In-Reply-To: <06b76cbb-847b-7866-9b10-67053566b376@gmail.com> References: <06182aa6-037c-9af0-015f-e3f47aaa4da8@gmail.com> <20190825014708.GA85707@cskk.homeip.net> <06b76cbb-847b-7866-9b10-67053566b376@gmail.com> Message-ID: <9dc1803a-8404-faca-f7cb-22102e2ccffa@wichmann.us> On 8/25/19 7:14 AM, bob gailer wrote: > On 8/24/2019 9:47 PM, Cameron Simpson wrote: >> >> Can you describe why you would want the original behaviour you describe? >> >> Bear in mind that most Python names can be rebound. So you can rebind >> "print" to a function of your own choosing. Should a() also honour that? >> >> Try to provide something you want to do in the real world which would >> benefit from this name behaviour. > > Thanks for your reply. My associate and I are co-authoring a project. I > am developing the main program; he is writing arduino drivers. > > In the main program I have several functions (e.g. log()) that are > called from main program code and from the arduino drivers. > > to keep a clean separation of code his drivers are in a separate module > that is imported by the main program. So we have a need to access some > of the functions I've written from both my code and his, which reside in > 2 different modules. > This should give you no problems, Python is coded this way all the time. If you want to have a function in another module access some data, import the module, call the function with the data as arguments, and code the function to accept such - that's the "pattern". ==== more explanation, fine to skip A module is just a Module object wrapping a dictionary. You can make one, outside of the import system, just to see: >>> y = 56 >>> globals() {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': , '__spec__': None, '__annotations__': {}, '__builtins__': , 'y': 56} >>> from types import ModuleType >>> spam = ModuleType('spam') >>> spam >>> spam.__dict__ {'__name__': 'spam', '__doc__': None, '__package__': None, '__loader__': None, '__spec__': None} There's no sign of the name 'y' from the current module's namespace in the namespace of the new module. This is entirely intentional. Importing is roughly: * Check if module you asked for is already in the module cache (i.e. alteady imported), if so just return the ref and put that in the current module's globals * else * find the file for the module you asked to import and read it in * create a new module object * compile the code you read in * exec the compiled object in the context of the dictionary of the new object so that dictionary will be populated by the result of running the module code * stick the module object in the module cache * return a reference to the object and put that in the current module's globals Notice there's no harm at all in multiple files in your project all importing the same thing (unless you goof up and manage to make circular dependencies with your imports) >>> globals() {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': , '__spec__': None, '__annotations__': {}, '__builtins__': , 'ModuleType': } >>> import spam >>> globals() {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': , '__spec__': None, '__annotations__': {}, '__builtins__': , 'ModuleType': , 'spam': } >>> spam.__dict__ {'__name__': 'spam', '__doc__': None, '__package__': '', 'a': } If you import with "from" or "as", then the exact same thing happens, except for the last step: your namespace dictionary gets a reference to what you asked for instead of a reference to the module object: >>> from spam import a >>> globals() {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': , '__spec__': None, '__annotations__': {}, '__builtins__': , 'ModuleType': , 'a': } >>> So the name 'a' in this module is now bound to the same function object that the name 'a' is bound to in the spam module's namespace. From alan.gauld at yahoo.co.uk Thu Aug 22 18:44:48 2019 From: alan.gauld at yahoo.co.uk (Alan Gauld) Date: Thu, 22 Aug 2019 23:44:48 +0100 Subject: [Tutor] Unexpected unsubscriptions Message-ID: <0696aa98-10bf-9af0-16d1-a6cfeb7d99c2@yahoo.co.uk> Some people have received mails saying they have been unsubscribed from tutor. I don't know why, but if it hasn't resolved itself in 24 hours I'll contact the email admins. If you get one don't panic, you can rejoin. A minor pain I know but hopefully its just a temporary glitch. Apologies, -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos From deepakdixit0001 at gmail.com Sun Aug 25 11:52:46 2019 From: deepakdixit0001 at gmail.com (Deepak Dixit) Date: Sun, 25 Aug 2019 21:22:46 +0530 Subject: [Tutor] Unexpected unsubscriptions In-Reply-To: <0696aa98-10bf-9af0-16d1-a6cfeb7d99c2@yahoo.co.uk> References: <0696aa98-10bf-9af0-16d1-a6cfeb7d99c2@yahoo.co.uk> Message-ID: Yes, I received the email also but its not an issue because we can resubscribe it, It is like this : The tutor at python.org mailing list was infested with lots of fake subscriptions. If you still want to participate on the tutor at python.org mailing list, please resubscribe using this invite email. If not, just ignore this mail. Your address "y our-email-address" has been invited to join the Tutor mailing list at python.org by the Tutor mailing list owner. You may accept the invitation by simply replying to this message, keeping the Subject: header intact. You can also visit this web page: https://mail.python.org/mailman/confirm/tutor/ some-random-digit Or you should include the following line -- and only the following line -- in a message to tutor-request at python.org: confirm some-random-digit Note that simply sending a `reply' to this message should work from most mail readers. If you want to decline this invitation, please simply disregard this message. If you have any questions, please send them to tutor-owner at python.org. To resubscribe, user can follow the instruction. On Sun, Aug 25, 2019 at 8:59 PM Alan Gauld via Tutor wrote: > Some people have received mails saying they have been unsubscribed from > tutor. > > I don't know why, but if it hasn't resolved itself in 24 hours I'll > contact the email admins. If you get one don't panic, you can rejoin. > A minor pain I know but hopefully its just a temporary glitch. > > Apologies, > > -- > Alan G > Author of the Learn to Program web site > http://www.alan-g.me.uk/ > http://www.amazon.com/author/alan_gauld > Follow my photo-blog on Flickr at: > http://www.flickr.com/photos/alangauldphotos > > _______________________________________________ > Tutor maillist - Tutor at python.org > To unsubscribe or change subscription options: > https://mail.python.org/mailman/listinfo/tutor > -- *With Regards,* *Deepak Kumar Dixit* From wachobc at gmail.com Sun Aug 25 14:21:03 2019 From: wachobc at gmail.com (Chip Wachob) Date: Sun, 25 Aug 2019 14:21:03 -0400 Subject: [Tutor] Unexpected unsubscriptions In-Reply-To: References: <0696aa98-10bf-9af0-16d1-a6cfeb7d99c2@yahoo.co.uk> Message-ID: I've received several of these messages since I first subscribed. Every couple of months a new one will appear. Each time there's a link to re-subscribe. I suspect this could be the 'host' trying to keep the lists down to those who are really interested in continuing to receive messages. On Sun, Aug 25, 2019 at 11:53 AM Deepak Dixit wrote: > Yes, > > I received the email also but its not an issue because we can resubscribe > it, It is like this : > > The tutor at python.org mailing list was infested with lots of fake > subscriptions. > > If you still want to participate on the tutor at python.org mailing list, > please resubscribe using this invite email. > If not, just ignore this mail. > Your address "y our-email-address" has been > invited to join the > Tutor mailing list at python.org by the Tutor mailing list owner. You > may accept the invitation by simply replying to this message, keeping > the Subject: header intact. > > You can also visit this web page: > > https://mail.python.org/mailman/confirm/tutor/ > < > https://mail.python.org/mailman/confirm/tutor/4dd5297fe5e0cbe5f03ac610e6dcdae0aba2295f > > > some-random-digit > > > Or you should include the following line -- and only the following > line -- in a message to tutor-request at python.org: > > confirm some-random-digit > > Note that simply sending a `reply' to this message should work from > most mail readers. > > If you want to decline this invitation, please simply disregard this > message. If you have any questions, please send them to > tutor-owner at python.org. > > To resubscribe, user can follow the instruction. > > On Sun, Aug 25, 2019 at 8:59 PM Alan Gauld via Tutor > wrote: > > > Some people have received mails saying they have been unsubscribed from > > tutor. > > > > I don't know why, but if it hasn't resolved itself in 24 hours I'll > > contact the email admins. If you get one don't panic, you can rejoin. > > A minor pain I know but hopefully its just a temporary glitch. > > > > Apologies, > > > > -- > > Alan G > > Author of the Learn to Program web site > > http://www.alan-g.me.uk/ > > http://www.amazon.com/author/alan_gauld > > Follow my photo-blog on Flickr at: > > http://www.flickr.com/photos/alangauldphotos > > > > _______________________________________________ > > Tutor maillist - Tutor at python.org > > To unsubscribe or change subscription options: > > https://mail.python.org/mailman/listinfo/tutor > > > > > -- > > > *With Regards,* > *Deepak Kumar Dixit* > _______________________________________________ > Tutor maillist - Tutor at python.org > To unsubscribe or change subscription options: > https://mail.python.org/mailman/listinfo/tutor > From sarah123ed at gmail.com Sun Aug 25 23:03:54 2019 From: sarah123ed at gmail.com (Sarah Hembree) Date: Sun, 25 Aug 2019 23:03:54 -0400 Subject: [Tutor] Chunking list/array data? In-Reply-To: <20190822100014.GA75022@cskk.homeip.net> References: <20190822100014.GA75022@cskk.homeip.net> Message-ID: thank you for your feedback. We'd not thought to use generators. Now we are looking how might best be done with numpy/numba. Do you have any thoughts in that arena? --- We not only inherit the Earth from our Ancestors, we borrow it from our Children. Aspire to grace. On Thu, 22 Aug 2019 at 06:00, Cameron Simpson wrote: > On 21Aug2019 21:26, Sarah Hembree wrote: > >How do you chunk data? We came up with the below snippet. It works (with > >integer list data) for our needs, but it seems so clunky. > > > > def _chunks(lst: list, size: int) -> list: > > return [lst[x:x+size] for x in range(0, len(lst), size)] > > > >What do you do? Also, what about doing this lazily so as to keep memory > >drag at a minimum? > > This looks pretty good to me. But as you say, it constructs the complete > list of chunks and returns them all. For many chunks that is both slow > and memory hungry. > > If you want to conserve memory and return chunks in a lazy manner you > can rewrite this as a generator. A first cut might look like this: > > def _chunks(lst: list, size: int) -> list: > for x in range(0, len(lst), size): > yield lst[x:x+size] > > which causes _chunk() be a generator function: it returns an iterator > which yields each chunk one at a time - the body of the function is kept > "running", but stalled. When you iterate over the return from _chunk() > Python runs that stalled function until it yields a value, then stalls > it again and hands you that value. > > Modern Python has a thing called a "generator expression". Your original > function is a "list comprehension": it constructs a list of values and > returns that list. In many cases, particularly for very long lists, that > can be both slow and memory hungry. You can rewrite such a thing like > this: > > def _chunks(lst: list, size: int) -> list: > return ( lst[x:x+size] for x in range(0, len(lst), size) ) > > Omitting the square brackets turns this into a generator expression. It > returns an iterator instead of a list, which functions like the > generator function I sketched, and generates the chunks lazily. > > Cheers, > Cameron Simpson > From cs at cskk.id.au Mon Aug 26 04:29:08 2019 From: cs at cskk.id.au (Cameron Simpson) Date: Mon, 26 Aug 2019 18:29:08 +1000 Subject: [Tutor] Chunking list/array data? In-Reply-To: References: Message-ID: <20190826082908.GA40937@cskk.homeip.net> On 25Aug2019 23:03, Sarah Hembree wrote: >thank you for your feedback. We'd not thought to use generators. Now we are >looking how might best be done with numpy/numba. Do you have any thoughts >in that arena? Not specificly. I've not had any opportunity to use those. Cheers, Cameron Simpson From bgailer at gmail.com Mon Aug 26 09:45:18 2019 From: bgailer at gmail.com (bob gailer) Date: Mon, 26 Aug 2019 09:45:18 -0400 Subject: [Tutor] seeking design pattern In-Reply-To: <20190825014708.GA85707@cskk.homeip.net> References: <06182aa6-037c-9af0-015f-e3f47aaa4da8@gmail.com> <20190825014708.GA85707@cskk.homeip.net> Message-ID: <3f638e18-fca1-ab63-11d2-ff7ace28de7e@gmail.com> On 24Aug2019 20:39, bob gailer wrote: >> I desire to import some functions form a module and give them access >> to names in the main module namespace. Example: Problem solved: imported functions are assigned to the run methods of classes whose names are the title() version of the function name, using the __init_subclass__ method of the superclass. The "shared functions", those that I want to make available to the imported functions, are methods of the superclass. So a function to be imported is defined thus: def foo(self, *args(): ??? self.shared_function() This description is IMHO complete but perhaps too terse. If you want further explanation, just let me know. -- Bob Gailer From rmlibre at riseup.net Mon Aug 26 11:55:33 2019 From: rmlibre at riseup.net (rmlibre at riseup.net) Date: Mon, 26 Aug 2019 08:55:33 -0700 Subject: [Tutor] seeking design pattern (rmlibre) In-Reply-To: References: Message-ID: <5189af9377bd4f0fcc181b44afd2d9e0@riseup.net> Cameron's solution is very elegant and simple, I would suggest it unless you have a strong reason not to. That said, I have had a use for a similar idea in a real-world case: --- m.py def very_expensive_function(): """make a global s (constant or variable) that is very expensive to compute""" global s s = "expensive computation" def a(): """either do something with s or return s as-is""" global s return s """ In this use-case you'd perform the expensive computation once at the global level in the imported script. This way it's only run once at import """ very_expensive_function() --- Interactive Console >from m import a >a() >>'expensive computation' You could also just import the global s >from m import s >s >'expensive computation' But in your example, this wouldn't be necessary since s is not expensive to compute, making Cameron's suggestion shine again. However, you may want to perform some expensive computation on s in one script or console, but where the underlying function/class and function/class state resides and depends on another script. I can see this being valuable. In that case: --- m.py def very_expensive_function(some_input): """do some expensive computation with some_input and/or state within m.py and save it to a global s""" global s s = f"very expensive computation with {some_input}" def a(cheap_function=None): if cheap_function: return cheap_function(s) else: return s very_expensive_function("some state within the m.py module") --- Interactive Console >from m import a, very_expensive_function > >a() >'very expensive computation with some state within the m.py module' > >very_expensive_function(3) >a() >'very expensive computation with 3' """ a hundred lines of code later, quickly get the value without doing the very expensive computation again and irrespective of the scope """ >a() >'very expensive computation with 3' m.py could also be a shared resource between many different modules. In that case you also may want to use this idea so you don't have to define s in every module. You could instead define it in just one module, m.py, which is called by all the others. And since it can also just be calculated once at import, it automates the process of creating a constant or variable which is unique to each instantiation (such as creating a random number seed for a PRNG, or getting date based data). On 2019-08-25 01:47, tutor-request at python.org wrote: > Send Tutor mailing list submissions to > tutor at python.org > > To subscribe or unsubscribe via the World Wide Web, visit > https://mail.python.org/mailman/listinfo/tutor > or, via email, send a message with subject or body 'help' to > tutor-request at python.org > > You can reach the person managing the list at > tutor-owner at python.org > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of Tutor digest..." > > Today's Topics: > > 1. Re: venv questions (Mats Wichmann) > 2. Re: Fwd: Mailing list chaos. (David L Neil) > 3. seeking design pattern (bob gailer) > 4. Re: Fwd: Mailing list chaos. (David Rock) > 5. Re: seeking design pattern (Cameron Simpson) > > _______________________________________________ > Tutor maillist - Tutor at python.org > https://mail.python.org/mailman/listinfo/tutor From Yuanyuan.A.Olsen at HealthPartners.Com Mon Aug 26 11:46:49 2019 From: Yuanyuan.A.Olsen at HealthPartners.Com (Olsen, Avalow Y) Date: Mon, 26 Aug 2019 15:46:49 +0000 Subject: [Tutor] NLP Message-ID: <30e7b370552e447e8a7065a58cecb65b@HPEXCH05.HealthPartners.int> Hi, I am new to Python but need to make a proof of concept to use Python to build a predictive model for cancer diagnosis on our lab data with Natural Language Processing (NLTK). Has anyone done any cancer work with NLP? Given my situation, what is the best way to get started? Thank you in advance! Ava ________________________________ This e-mail and any files transmitted with it are confidential and are intended solely for the use of the individual or entity to whom they are addressed. If you are not the intended recipient or the individual responsible for delivering the e-mail to the intended recipient, please be advised that you have received this e-mail in error and that any use, dissemination, forwarding, printing, or copying of this e-mail is strictly prohibited. If you have received this communication in error, please return it to the sender immediately and delete the original message and any copy of it from your computer system. If you have any questions concerning this message, please contact the sender. Disclaimer R001.0 From mats at wichmann.us Mon Aug 26 12:41:53 2019 From: mats at wichmann.us (Mats Wichmann) Date: Mon, 26 Aug 2019 10:41:53 -0600 Subject: [Tutor] NLP In-Reply-To: <30e7b370552e447e8a7065a58cecb65b@HPEXCH05.HealthPartners.int> References: <30e7b370552e447e8a7065a58cecb65b@HPEXCH05.HealthPartners.int> Message-ID: <878eb00c-119d-75ae-afe1-a99b4289675b@wichmann.us> On 8/26/19 9:46 AM, Olsen, Avalow Y wrote: > Hi, > > I am new to Python but need to make a proof of concept to use Python to build a predictive model for cancer diagnosis on our lab data with Natural Language Processing (NLTK). > > Has anyone done any cancer work with NLP? Given my situation, what is the best way to get started? And your lab data is in the form of human language narrative (physician's notes, etc)? If so, nltk will be useful for breaking down the data into parts you can work with, but there's an awfully long way to go from there to diagnosis... You probably want to get a bit more familiar with Python before tackling this, just as an opinion. There are people who have worked on this field, I'd be somewhat surprised if many (any?) of them are listening here. A little internet searching turns up this link: https://towardsdatascience.com/introduction-to-clinical-natural-language-processing-predicting-hospital-readmission-with-1736d52bc709 From PyTutor at DancesWithMice.info Mon Aug 26 14:11:55 2019 From: PyTutor at DancesWithMice.info (David L Neil) Date: Tue, 27 Aug 2019 06:11:55 +1200 Subject: [Tutor] NLP In-Reply-To: <878eb00c-119d-75ae-afe1-a99b4289675b@wichmann.us> References: <30e7b370552e447e8a7065a58cecb65b@HPEXCH05.HealthPartners.int> <878eb00c-119d-75ae-afe1-a99b4289675b@wichmann.us> Message-ID: <65a5f0df-bf5e-2e3f-7ea3-682a529e82db@DancesWithMice.info> On 27/08/19 4:41 AM, Mats Wichmann wrote: > On 8/26/19 9:46 AM, Olsen, Avalow Y wrote: >> I am new to Python but need to make a proof of concept to use Python to build a predictive model for cancer diagnosis on our lab data with Natural Language Processing (NLTK). >> >> Has anyone done any cancer work with NLP? Given my situation, what is the best way to get started? > > And your lab data is in the form of human language narrative > (physician's notes, etc)? If so, nltk will be useful for breaking down > the data into parts you can work with, but there's an awfully long way > to go from there to diagnosis... > > You probably want to get a bit more familiar with Python before tackling > this, just as an opinion. ... At first, confusion reigned as to how NLTK would fit into such a process - expecting radiographic and other scan image analysis; until the above analysis. Coursera.org is 'down for maintenance', but IIRC they have courses which include NLTK. Probably under headings such as Machine Learning, and Data Science; as well as language/linguistics. There are a number of texts introducing and detailing NLTK. -- Regards =dn From alan.gauld at yahoo.co.uk Fri Aug 23 13:57:57 2019 From: alan.gauld at yahoo.co.uk (Alan Gauld) Date: Fri, 23 Aug 2019 18:57:57 +0100 Subject: [Tutor] Mailing list chaos. Message-ID: <7e8203e1-4db0-f3cd-4d05-646145099da1@yahoo.co.uk> Hi all, Like everyone else I've been un-subscribed and now re-subscribed to the tutor list. My apologies but I had no notice that this would happen. As I understand it the issue was a server wide problem affecting all Python lists which was traced to an issue on the tutor list but they ad no way to narrow it down to which members configs were at fault. So they took the draconian decision to unsubscribe everyone and then re-invite them to join. Without thinking to warn the list owners first.... Apologies. We are now close to 400 members again, but we were close to 800 last time I looked. It will be interesting to see how many more make it back to the fold (and even more interesting to know the reasons for those who don't!) I also went through and removed moderation from everyone on the list as of an hour ago. Hopefully normal service is now restored.... PS For those interested the issue was related to senderscore spamtraps: https://www.senderscore.org/ don't ask me... -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos From PyTutor at DancesWithMice.info Wed Aug 28 19:01:50 2019 From: PyTutor at DancesWithMice.info (David L Neil) Date: Thu, 29 Aug 2019 11:01:50 +1200 Subject: [Tutor] NLP In-Reply-To: <4dcd63e6d4e349f89b3118382488df1f@HPEXCH05.HealthPartners.int> References: <30e7b370552e447e8a7065a58cecb65b@HPEXCH05.HealthPartners.int> <878eb00c-119d-75ae-afe1-a99b4289675b@wichmann.us> <65a5f0df-bf5e-2e3f-7ea3-682a529e82db@DancesWithMice.info> <4dcd63e6d4e349f89b3118382488df1f@HPEXCH05.HealthPartners.int> Message-ID: <0a5e147d-afe5-83a4-c9e3-1415a28f69ec@DancesWithMice.info> On 27/08/19 6:29 AM, Olsen, Avalow Y wrote:> Thanks again, David! > > Other suggestions I received include training myself first by reading a > good book or getting more familiar with Python. I did a crush learning > on Python syntax over the weekend on my own. I decided to read the > book below next. And go from there. - Ava Ava, I have only briefly glanced at one or two articles in this series (19 as of yesterday) and make no comment about the suitability or efficacy of the tools discussed, but you may find them worthy of review:- Python for NLP: Working with Text and PDF Files By Usman Malik ? March 07, 2019 https://stackabuse.com/python-for-nlp-multi-label-text-classification-with-keras/ -- Regards =dn From bfishbein79 at gmail.com Thu Aug 29 16:00:26 2019 From: bfishbein79 at gmail.com (Benjamin Fishbein) Date: Thu, 29 Aug 2019 15:00:26 -0500 Subject: [Tutor] Appending to CSV file puts data in wrong columns Message-ID: <1D90CD9A-086A-4F98-8A9B-1E4F8901B076@gmail.com> Here?s the code, using the csv module. It adds a new row to an existing file. def save_sku_and_price_data_to_csv(sku, price, path): row = {"sku": sku, "price": price} with open(path, "a") as csvfile: writer = csv.DictWriter(csvfile, fieldnames=row.keys()) writer.writerow(row) print("adding", row, "to", path) Here?s the problem: It worked properly the first time I ran it, but today it has been writing the ?sku?s in the ?price? column and the ?price?s in the ?sku? column. Any idea why this is or how to fix it? From cskap21 at gmail.com Thu Aug 29 15:19:12 2019 From: cskap21 at gmail.com (Cheyne Skapyak) Date: Thu, 29 Aug 2019 15:19:12 -0400 Subject: [Tutor] Simple python help needed Message-ID: Hello, so i'm trying to modify some code so that basically i can choose what difficulty of guess the number i want to play. I'm trying to use def but it keeps coming back saying they aren't defined which i think they are, i cant seem to find a solution. here is the code Thank you import random import time print ('Welcome!') print() print ('************MAIN MENU************') print() time.sleep(.5) print ('Would you like to play the Easy, Medium, or Hard game mode?') print() choice = input(''' A: Easy Game Mode B: Medium Game Mode C: Hard Game mode Please enter your choice: ''') if choice =='A' or choice =='a': easy() elif choice =='B' or choice =='b': medium() elif choice =='C' or choice =='c': hard() print() # Gamemode Easy def easy(): guessesTaken = 0 print('Hello! What is your name?') myName = input() number = random.randint(1, 15) print('Well, ' + myName + ', I am thinking of a number between 1 and 15.') for guessesTaken in range(7): print('Take a guess.') # Four spaces in front of "print" guess = input() guess = int(guess) if guess < number: print('Your guess is too low.') # Eight spaces in front of "print" if guess > number: print('Your guess is too high.') if guess == number: break if guess == number: guessesTaken = str(guessesTaken + 1) print('Good job, ' + myName + '! You guessed my number in ' + guessesTaken + ' guesses!') if guess != number: number = str(number) print('Nope. The number I was thinking of was ' + number + '.') # Gamemode Medium def medium(): guessesTaken = 0 print('Hello! What is your name?') myName = input() number = random.randint(1, 20) print('Well, ' + myName + ', I am thinking of a number between 1 and 20.') for guessesTaken in range(6): print('Take a guess.') # Four spaces in front of "print" guess = input() guess = int(guess) if guess < number: print('Your guess is too low.') # Eight spaces in front of "print" if guess > number: print('Your guess is too high.') if guess == number: break if guess == number: guessesTaken = str(guessesTaken + 1) print('Good job, ' + myName + '! You guessed my number in ' + guessesTaken + ' guesses!') if guess != number: number = str(number) print('Nope. The number I was thinking of was ' + number + '.') # Gamemode Hard def hard(): guessesTaken = 0 print('Hello! What is your name?') myName = input() number = random.randint(1, 50) print('Well, ' + myName + ', I am thinking of a number between 1 and 50.') for guessesTaken in range(5): print('Take a guess.') # Four spaces in front of "print" guess = input() guess = int(guess) if guess < number: print('Your guess is too low.') # Eight spaces in front of "print" if guess > number: print('Your guess is too high.') if guess == number: break if guess == number: guessesTaken = str(guessesTaken + 1) print('Good job, ' + myName + '! You guessed my number in ' + guessesTaken + ' guesses!') if guess != number: number = str(number) print('Nope. The number I was thinking of was ' + number + '.') From PyTutor at DancesWithMice.info Thu Aug 29 17:14:06 2019 From: PyTutor at DancesWithMice.info (David L Neil) Date: Fri, 30 Aug 2019 09:14:06 +1200 Subject: [Tutor] Simple python help needed In-Reply-To: References: Message-ID: On 30/08/19 7:19 AM, Cheyne Skapyak wrote: > Hello, so i'm trying to modify some code so that basically i can choose > what difficulty of guess the number i want to play. I'm trying to use def > but it keeps coming back saying they aren't defined which i think they are, > i cant seem to find a solution. here is the code It would be kinder if the actual diagnostics returned by Python were included! Python is an interpreted language. So, the code is examined line-by-line. If you wish to *use* functions such as easy(), medium(), and hard(); then they must have been previously def[ined] (appear 'higher-up' in the code). The <<<__name__ == ?__main__?>>> idiom (phrase) is commonly-used in Python (for more reasons than this question). Please review https://www.geeksforgeeks.org/what-does-the-if-__name__-__main__-do/ and find a later example which WILL demonstrate how to solve this problem in a Pythonic manner! > Thank you > > > import random > import time > > print ('Welcome!') > print() > print ('************MAIN MENU************') > print() > time.sleep(.5) > print ('Would you like to play the Easy, Medium, or Hard game mode?') > print() > > choice = input(''' > A: Easy Game Mode > B: Medium Game Mode > C: Hard Game mode > > Please enter your choice: ''') > if choice =='A' or choice =='a': > easy() > elif choice =='B' or choice =='b': > medium() > elif choice =='C' or choice =='c': > hard() > print() > > # Gamemode Easy > def easy(): > guessesTaken = 0 > > print('Hello! What is your name?') > myName = input() > > number = random.randint(1, 15) > print('Well, ' + myName + ', I am thinking of a number between 1 and 15.') > > for guessesTaken in range(7): > print('Take a guess.') # Four spaces in front of "print" > guess = input() > guess = int(guess) > > if guess < number: > print('Your guess is too low.') # Eight spaces in front of "print" > > if guess > number: > print('Your guess is too high.') > > if guess == number: > break > > if guess == number: > guessesTaken = str(guessesTaken + 1) > print('Good job, ' + myName + '! You guessed my number in ' + > guessesTaken + ' guesses!') > if guess != number: > number = str(number) > print('Nope. The number I was thinking of was ' + number + '.') > > # Gamemode Medium > def medium(): > guessesTaken = 0 > > print('Hello! What is your name?') > myName = input() > number = random.randint(1, 20) > > print('Well, ' + myName + ', I am thinking of a number between 1 and > 20.') > > for guessesTaken in range(6): > print('Take a guess.') # Four spaces in front of "print" > guess = input() > guess = int(guess) > > if guess < number: > print('Your guess is too low.') # Eight spaces in front of "print" > > if guess > number: > print('Your guess is too high.') > > if guess == number: > break > > if guess == number: > guessesTaken = str(guessesTaken + 1) > print('Good job, ' + myName + '! You guessed my number in ' + > guessesTaken + ' guesses!') > > if guess != number: > number = str(number) > print('Nope. The number I was thinking of was ' + number + '.') > > # Gamemode Hard > def hard(): > guessesTaken = 0 > > print('Hello! What is your name?') > myName = input() > > number = random.randint(1, 50) > print('Well, ' + myName + ', I am thinking of a number between 1 and 50.') > > for guessesTaken in range(5): > print('Take a guess.') # Four spaces in front of "print" > guess = input() > guess = int(guess) > > if guess < number: > print('Your guess is too low.') # Eight spaces in front of "print" > > if guess > number: > print('Your guess is too high.') > > if guess == number: > break > > if guess == number: > guessesTaken = str(guessesTaken + 1) > print('Good job, ' + myName + '! You guessed my number in ' + > guessesTaken + ' guesses!') > if guess != number: > number = str(number) > print('Nope. The number I was thinking of was ' + number + '.') > _______________________________________________ > Tutor maillist - Tutor at python.org > To unsubscribe or change subscription options: > https://mail.python.org/mailman/listinfo/tutor > -- Regards =dn From mats at wichmann.us Thu Aug 29 19:13:42 2019 From: mats at wichmann.us (Mats Wichmann) Date: Thu, 29 Aug 2019 17:13:42 -0600 Subject: [Tutor] Simple python help needed In-Reply-To: References: Message-ID: <1e6837ae-7bf0-7981-e69b-5e6c927ded1b@wichmann.us> On 8/29/19 1:19 PM, Cheyne Skapyak wrote: > Hello, so i'm trying to modify some code so that basically i can choose > what difficulty of guess the number i want to play. I'm trying to use def > but it keeps coming back saying they aren't defined which i think they are, > i cant seem to find a solution. here is the code after a glance, consider these notes: you seem to be writing three functions for the three difficulty levels. you shouldn't need to do that: good function design would mean you can pass in what you need to know (like the range from which the number is chosen - you've used 15, 20 and 50); the code is otherwise essentially common, which indeed makes it a good candidate for a function. but the functions you've written are really short (one-liners), and the code that seems to belong to the functions is actually outside them... in Python that's an indent thing: indentation tells the interpreter what lines of code belong to a particular block, so everything that belongs inside def foo(): needs to be indented to be considered part of that clode block. And then as has already been noted, the order of things matter. Unlike some languages, a function definition is an executable "statement" (usually a whole block of code, see above) that is executed as it is seen, and the result is a callable object which then can be called by subsequent code. So just keep that in mind. From alan.gauld at btinternet.com Thu Aug 29 19:50:23 2019 From: alan.gauld at btinternet.com (Alan Gauld) Date: Fri, 30 Aug 2019 00:50:23 +0100 Subject: [Tutor] Appending to CSV file puts data in wrong columns In-Reply-To: <1D90CD9A-086A-4F98-8A9B-1E4F8901B076@gmail.com> References: <1D90CD9A-086A-4F98-8A9B-1E4F8901B076@gmail.com> Message-ID: <4397798c-f81b-1462-427f-67f2f198fc8e@btinternet.com> On 29/08/2019 21:00, Benjamin Fishbein wrote: > Here?s the code, using the csv module. It adds a new row to an existing file. > > def save_sku_and_price_data_to_csv(sku, price, path): > row = {"sku": sku, "price": price} > with open(path, "a") as csvfile: > writer = csv.DictWriter(csvfile, fieldnames=row.keys()) > writer.writerow(row) > print("adding", row, "to", path) > > Here?s the problem: It worked properly the first time I ran it, but today it has been writing the ?sku?s in the ?price? column and the ?price?s in the ?sku? column. > Any idea why this is or how to fix it? You don't say which version of python (or OS) you are using but there have been changes in the way dictionaries work that might make it significant. I don't think so but its worth stating just in case. Otherwise the function looks OK to me. Can we see the calling code too? -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos From jjhartley at gmail.com Thu Aug 29 21:14:59 2019 From: jjhartley at gmail.com (James Hartley) Date: Thu, 29 Aug 2019 20:14:59 -0500 Subject: [Tutor] Doctest meets unittest Message-ID: Does anyone ever try to insert doctest sessions into the docstring descriptions of the TestCase?s? Thanks! From cal.97g at gmail.com Thu Aug 29 21:27:51 2019 From: cal.97g at gmail.com (Cal97g .) Date: Fri, 30 Aug 2019 02:27:51 +0100 Subject: [Tutor] Appending to CSV file puts data in wrong columns In-Reply-To: <4397798c-f81b-1462-427f-67f2f198fc8e@btinternet.com> References: <1D90CD9A-086A-4F98-8A9B-1E4F8901B076@gmail.com> <4397798c-f81b-1462-427f-67f2f198fc8e@btinternet.com> Message-ID: As Alan has touched on here, Benjamin, the issue is the dictionary order. In Python 2.7 dictionaries were intentionally randomly ordered and this behaviour would result in this issue. At some point in Python 3 dictionaries were changed to maintain order based on insertion order. In Python 3.3 they were changed again so that each session of Python would produce a potentially different order. The issue is you are passing *row.keys() *csv.DictWriter. This will not maintain order. You need to store your column values in an ordered datatype like a list. def save_sku_and_price_data_to_csv(sku, price, path): columns = ["sku", "price"] row = {"sku": sku, "price": price} with open(path, "a") as csvfile: writer = csv.DictWriter(csvfile, fieldnames=columns) writer.writerow(row) print("adding", row, "to", path) Callam On Fri, Aug 30, 2019 at 12:51 AM Alan Gauld via Tutor wrote: > On 29/08/2019 21:00, Benjamin Fishbein wrote: > > Here?s the code, using the csv module. It adds a new row to an existing > file. > > > > def save_sku_and_price_data_to_csv(sku, price, path): > > row = {"sku": sku, "price": price} > > with open(path, "a") as csvfile: > > writer = csv.DictWriter(csvfile, fieldnames=row.keys()) > > writer.writerow(row) > > print("adding", row, "to", path) > > > > Here?s the problem: It worked properly the first time I ran it, but > today it has been writing the ?sku?s in the ?price? column and the ?price?s > in the ?sku? column. > > Any idea why this is or how to fix it? > You don't say which version of python (or OS) you are using but there > have been changes > in the way dictionaries work that might make it significant. I don't > think so but its worth > stating just in case. > > Otherwise the function looks OK to me. Can we see the calling code too? > > -- > > Alan G > Author of the Learn to Program web site > http://www.alan-g.me.uk/ > http://www.amazon.com/author/alan_gauld > Follow my photo-blog on Flickr at: > http://www.flickr.com/photos/alangauldphotos > > _______________________________________________ > Tutor maillist - Tutor at python.org > To unsubscribe or change subscription options: > https://mail.python.org/mailman/listinfo/tutor > From alan.gauld at btinternet.com Thu Aug 29 19:36:39 2019 From: alan.gauld at btinternet.com (Alan Gauld) Date: Fri, 30 Aug 2019 00:36:39 +0100 Subject: [Tutor] Simple python help needed In-Reply-To: References: Message-ID: On 29/08/2019 20:19, Cheyne Skapyak wrote: > Hello, so i'm trying to modify some code so that basically i can choose > what difficulty of guess the number i want to play. I'm trying to use def > but it keeps coming back saying they aren't defined which i think they are, That could mean a couple of tongs. Please always send the exact error messages in full so we don't need to guess. > import random > import time > > print ('Welcome!') > print() > print ('************MAIN MENU************') > print() > time.sleep(.5) > print ('Would you like to play the Easy, Medium, or Hard game mode?') > print() > > choice = input(''' > A: Easy Game Mode > B: Medium Game Mode > C: Hard Game mode > > Please enter your choice: ''') > if choice =='A' or choice =='a': > easy() You xall easy() but it hasn't been defined yet. However even if you move the definition to the top there is still a problem def easy(): ?????? guessesTaken = 0 Here is the definition which does absolutely nothing useful. That's because guessesTaken is a local variable only visible inside easy(). You need to return the value to the outside world to be able to use it. However, since you always set the same value you might as well not use a function but just assign the value directly if choice =='A' or choice =='a': guessesTaken = 0 for guessesTaken in range(7): inside the loop guessesTaken will be an integer (0..6) > print('Take a guess.') # Four spaces in front of "print" > guess = input() > guess = int(guess) > > if guess < number: > print('Your guess is too low.') # Eight spaces in front of "print" > > if guess > number: > print('Your guess is too high.') > > if guess == number: > break But you never use guessesTaken inside the loop. > if guess == number: > guessesTaken = str(guessesTaken + 1) > print('Good job, ' + myName + '! You guessed my number in ' + > guessesTaken + ' guesses!') You don;t need all the string addition. print knows how to convert things to strings automativally so just use: > if guess == number: > print('Good job,', myName, '! You guessed my number in ', guessesTaken,' guesses!') Or for more control use string formatting: > if guess == number: > print('Good job, %s! You guessed my number in %d guesses!' %(myname, guessesTaken)) def medium(): > guessesTaken = 0 > > print('Hello! What is your name?') > myName = input() > number = random.randint(1, 20) > > print('Well, ' + myName + ', I am thinking of a number between 1 and > 20.') This time you have put some of the game handling code inside the function You didn't do that with easy()... But again note that guessesTaken and myname are only visible inside the function. You need to return them for the rest of your code to use them. I'll stop here since the rest would just have the same comments. In summary: - move your functions to the top of the program. - return the values you want to use. - Don't bother with the str() conversions, let print do it for you. - Think about how you can avoid all the repetition of code. You are on the right track you just need to refine the code slightly. -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos From Nagarajan.Arulanand at in.bosch.com Fri Aug 30 06:24:17 2019 From: Nagarajan.Arulanand at in.bosch.com (Arulanand Nagarajan (RBEI/EEV51-EC)) Date: Fri, 30 Aug 2019 10:24:17 +0000 Subject: [Tutor] Clarification on using regular expression Message-ID: Hi, I am currently working on a python script which uses regular expressions for processing some data. I have some string as below(each in new line): aa1 !=5 bb1 >=1 cc1 ==1 dd2 <= 2 e3 <2 >From this string, I want to get a list of all the labels that are before the comparison operator and another list that contains the values after the comparison operator. That is list1 = ['aa1','bb1','cc1','dd2','e3'] list2 = ['5','1','1','2','2'] How will I be able to do that? I was able to get label before the '==' operator using the command below: [v.strip() for v in re.findall("[a-zA-Z0-9_.]* ? (?==\=)", string)]. But i want all the labels that are placed before all the comparison operators (!=, ==, <, >, <=, >=). i have tried the commands below: [v.strip() for v in re.findall("[a-zA-Z0-9_.]* ? (?(!=|==|<=|>=|>|<)\=)", string)] [v.strip() for v in re.findall("[a-zA-Z0-9_.]* ? (?(!=|==|<=|>=|>|<))", string)] Can you pl. help me on this? Best regards, Nagarajan Arulanand RBEI/EEV5-EC From alan.gauld at btinternet.com Fri Aug 30 11:47:27 2019 From: alan.gauld at btinternet.com (Alan Gauld) Date: Fri, 30 Aug 2019 16:47:27 +0100 Subject: [Tutor] Clarification on using regular expression In-Reply-To: References: Message-ID: <5fa4f7d6-8645-b65b-8c18-5d8c2adf9a4e@btinternet.com> On 30/08/2019 11:24, Arulanand Nagarajan (RBEI/EEV51-EC) via Tutor wrote: > I am currently working on a python script which uses regular expressions for processing some data. > I have some string as below(each in new line): > aa1 !=5 > bb1 >=1 > cc1 ==1 > dd2 <= 2 > e3 <2 > >From this string, I want to get a list of all the labels that are before the comparison operator and another list that contains the values after the comparison operator. > That is > list1 = ['aa1','bb1','cc1','dd2','e3'] > list2 = ['5','1','1','2','2'] > How will I be able to do that? Without regular expressions hopefully. Try: >>> ops = " !=<>+-/|^~"?? # modify to contain all your symbols >>> strings = ["aa1 !=5", "bb1 >=1","cc1 ==1","dd2 <= 2","e3 <2"] >>> def getValues(string): return (v.lstrip(ops) for v in string.split()) >>> results = [getValues(s) for s in strings] You could use a regex here but I think the non regex version is easier. HTH -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos From adameyring at gmail.com Fri Aug 30 23:21:06 2019 From: adameyring at gmail.com (Adam Eyring) Date: Fri, 30 Aug 2019 23:21:06 -0400 Subject: [Tutor] Simple python help needed In-Reply-To: References: Message-ID: I ran the code after putting the functions in the proper sequence (before they are called) and the game ran fine after the indenting was corrected from how you pasted it. As others said, simplifying will help a lot. As beginner, I like the idea of having separate functions for easy, med, and hard, but that's just me. The input asking for your name can be removed from the functions and put outside so myName becomes a global variable the functions can use. Otherwise, good start for a game! Adam On Thu, Aug 29, 2019 at 9:54 PM Alan Gauld via Tutor wrote: > On 29/08/2019 20:19, Cheyne Skapyak wrote: > > Hello, so i'm trying to modify some code so that basically i can choose > > what difficulty of guess the number i want to play. I'm trying to use def > > but it keeps coming back saying they aren't defined which i think they > are, > > > That could mean a couple of tongs. Please always send the exact error > messages > in full so we don't need to guess. > > > > import random > > import time > > > > print ('Welcome!') > > print() > > print ('************MAIN MENU************') > > print() > > time.sleep(.5) > > print ('Would you like to play the Easy, Medium, or Hard game mode?') > > print() > > > > choice = input(''' > > A: Easy Game Mode > > B: Medium Game Mode > > C: Hard Game mode > > > > Please enter your choice: ''') > > if choice =='A' or choice =='a': > > easy() > > You xall easy() but it hasn't been defined yet. > > However even if you move the definition to the top there is still a problem > > > def easy(): > > guessesTaken = 0 > > > Here is the definition which does absolutely nothing useful. > > That's because guessesTaken is a local variable only visible > inside easy(). You need to return the value to the outside world > to be able to use it. However, since you always set the same > value you might as well not use a function but just assign the > value directly > > > if choice =='A' or choice =='a': > guessesTaken = 0 > > for guessesTaken in range(7): > > inside the loop guessesTaken will be an integer (0..6) > > > print('Take a guess.') # Four spaces in front of "print" > > guess = input() > > guess = int(guess) > > > > if guess < number: > > print('Your guess is too low.') # Eight spaces in front of "print" > > > > if guess > number: > > print('Your guess is too high.') > > > > if guess == number: > > break > > But you never use guessesTaken inside the loop. > > > > if guess == number: > > guessesTaken = str(guessesTaken + 1) > > print('Good job, ' + myName + '! You guessed my number in ' + > > guessesTaken + ' guesses!') > > You don;t need all the string addition. print knows how to convert > things to strings automativally so just use: > > > > if guess == number: > > print('Good job,', myName, '! You guessed my number in ', > guessesTaken,' guesses!') > > > Or for more control use string formatting: > > > if guess == number: > > print('Good job, %s! You guessed my number in %d guesses!' %(myname, > guessesTaken)) > > def medium(): > > > guessesTaken = 0 > > > > print('Hello! What is your name?') > > myName = input() > > number = random.randint(1, 20) > > > > print('Well, ' + myName + ', I am thinking of a number between 1 and > > 20.') > > This time you have put some of the game handling code inside the function > > You didn't do that with easy()... > > But again note that guessesTaken and myname are only visible inside the > function. You need to return them for the rest of your code to use them. > > I'll stop here since the rest would just have the same comments. > > > In summary: > > - move your functions to the top of the program. > > - return the values you want to use. > > - Don't bother with the str() conversions, let print do it for you. > > - Think about how you can avoid all the repetition of code. > > You are on the right track you just need to refine the code slightly. > > > -- > Alan G > Author of the Learn to Program web site > http://www.alan-g.me.uk/ > http://www.amazon.com/author/alan_gauld > Follow my photo-blog on Flickr at: > http://www.flickr.com/photos/alangauldphotos > > _______________________________________________ > Tutor maillist - Tutor at python.org > To unsubscribe or change subscription options: > https://mail.python.org/mailman/listinfo/tutor >