我有一个"规范的文件结构"(我给出了明智的名称来简化阅读):
mainpack/
__main__.py
__init__.py
- helpers/
__init__.py
path.py
- network/
__init__.py
clientlib.py
server.py
- gui/
__init__.py
mainwindow.py
controllers.py
Run Code Online (Sandbox Code Playgroud)
在此结构中,例如,每个包中包含的模块可能希望helpers通过相对导入来访问实用程序,例如:
# network/clientlib.py
from ..helpers.path import create_dir
Run Code Online (Sandbox Code Playgroud)
该程序__main__.py以这种方式使用该文件"作为脚本"运行:
python mainpack/
Run Code Online (Sandbox Code Playgroud)
试图按照PEP 366我已经把__main__.py这些行:
___package___ = "mainpack"
from .network.clientlib import helloclient
Run Code Online (Sandbox Code Playgroud)
但是在跑步时:
$ python mainpack
Traceback (most recent call last):
File "/usr/lib/python2.6/runpy.py", line 122, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib/python2.6/runpy.py", line 34, in _run_code
exec code in run_globals
File "path/mainpack/__main__.py", line 2, in <module> …Run Code Online (Sandbox Code Playgroud) 特别是,我想在另一个未优化的 python 脚本中获取优化的 python 脚本的输出。
python -O tobeoptimized.py
Run Code Online (Sandbox Code Playgroud)
我曾尝试使用子进程,但我无法像在 runpy 中那样提取我需要的对象。
from subprocess import PIPE, run
command = ['python','-O','tobeoptimized.py']
result = run(command, stdout=PIPE, stderr=PIPE, universal_newlines=True)
Run Code Online (Sandbox Code Playgroud) 在尝试编译 python 3.7 时,我点击了Could not import runpy module:
jeremyr@b88:$ wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tar.xz
....
jeremyr@b88:~/Python-3.7.3$ ./configure --enable-optimizations
jeremyr@b88:~/Python-3.7.3$ make clean
jeremyr@b88:~/Python-3.7.3$ make -j32
....
gcc -pthread -Xlinker -export-dynamic -o Programs/_testembed Programs/_testembed.o libpython3.7m.a -lcrypt -lpthread -ldl -lutil -lm
./python -E -S -m sysconfig --generate-posix-vars ;\
if test $? -ne 0 ; then \
echo "generate-posix-vars failed" ; \
rm -f ./pybuilddir.txt ; \
exit 1 ; \
fi
Could not import runpy module
Traceback (most recent call last):
File "/home/jeremyr/Python-3.7.3/Lib/runpy.py", line …Run Code Online (Sandbox Code Playgroud) 你有一个调用另一个python脚本的包装python脚本,目前正在使用os.system('python another.py some-params').
您希望能够调试这两个脚本,如果您使用,os.system()您将松开调试器,因此使用相同的解释器加载第二个脚本而不是启动另一个脚本是有意义的.
import没有达到预期的目的,因为它没有运行__main__.
其他变体,例如exec()或runpy接缝错过argv参数.
你对这个问题有什么解决方案?
我正在寻找一个不需要你修改another.py脚本的解决方案.可能这需要sys.argv在执行之前修改它.
我有一个 Python 包(Python 3.6,如果它有所不同),我设计它作为“python -m包 参数”运行,我想为 __main__.py 模块编写单元测试。我特别想验证它是否正确设置了退出代码。是否可以使用 runpy.run_module 来执行我的 __main__.py 并测试退出代码?如果是这样,我如何检索退出代码?
更清楚地说,我的 __main__.py 模块非常简单。它只是调用一个经过广泛单元测试的函数。但是当我最初编写 __main__.py 时,我忘记将该函数的结果传递给 exit(),因此我希望在单元测试中模拟 main 函数以确保正确设置退出代码。我的单元测试看起来像:
@patch('my_module.__main__.my_main', return_value=2)
def test_rc2(self, _):
"""Test that rc 2 is the exit code."""
sys.argv = ['arg0', 'arg1', 'arg2', …]
runpy.run_module('my_module')
self.assertEqual(mod_rc, 2)
Run Code Online (Sandbox Code Playgroud)
我的问题是,我如何得到我在这里写的“mod_rc”?
谢谢。
我在闲聊:
>>> import mymodule
>>> # ???
Run Code Online (Sandbox Code Playgroud)
导入模块后:
if __name__ == '__main__':
doStuff()
Run Code Online (Sandbox Code Playgroud)
我如何实际main从IDLE 打电话?
我想知道runpyPython中模块的用途以及它如何帮助 Python 用户社区的日常开发?
有人可以解释一下runpypython中模块的必要性、用法和优点吗?