2012-02-26 132 views
0

我在跟踪这件事时遇到了一些麻烦。当我不在virtualenv下执行'python -m site'时,我得到了一个很好的输出结果,列出了我的sys.path目录和其他东西。当我切换到virtualenv时,没有输出。我简单地看了一下https://github.com/pypa/virtualenv/blob/develop/virtualenv.py下的代码,我可以看到virtualenv创建它自己的site.py - 但这个模块仍然有__main__挂钩,并且当我从解释器中导入并调用在if __name__ == '__main__'下执行的任何获取时,它都可以工作。当我尝试通过-m开关执行它时,有什么区别?为什么在virtualenv下python -m站点没有输出?

回答

0

我对这个问题有点感兴趣。所以我做了一些黑客。

首先,我通过插入print(__name__)行来更改site.py在python库目录中。结果是

$ python -m site 
site 

接下来,我添加了一些文件mymodule.py到库文件夹使用单线print(__name__)。现在的结果是

$ python -m mymodule 
site 
__main__ 

所以似乎网站模块之前python -m site命令导入将运行该模块作为脚本。当它再次用于脚本执行时,python会省略二次导入。

相关问题