How to know if python script was run using interpreter's -m option?

I couldn't find answer after having read all the following:

Rationale: When a test script which uses relative imports is being run without -m option I could print a warning message instead of leaving user with standard traceback leading to ValueError: Attempted relative import in non-package exception. Without knowing this I can catch this exception and only suggest lack of -m option could be the reason of error.

Answers


Another observation is that __package__ is set to None when executing the script directly and to the package name when using -m (using the empty string when the module isn't included in any package, so it's still different from None).


Disclaimer: this is just an observation, I have not seen it in the docs so it is probably implementation dependent and might not be consistent across different Python versions.

I have noticed that when calling a script using a -m option a variable called __loader__ is added to the namespace, so at the top of your script you could check for existence of that variable:

if '__loader__' in globals():
    # called with -m

For some extra safety you could check to see if __loader__ is an instance of pkgutil.ImpLoader:

if '__loader__' in globals() and __loader__.__class__.__name__ == 'ImpLoader':

Need Your Help

Cocos2D-x HelloCpp for Android unable to build apk from Windows due to permission denied on asset file

android cocos2d-x

I was trying to run cocos2dx HelloCpp sample project on Android, building from Windows-7 64 bit with Cygwin 64 bit, however, everytime I try to build and run, it complains that permission was denie...

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.