使用多处理时从更高级别目录导入python
我的python2应用程序是用run.py启动的,它位于我的顶级项目目录中。它为许多实验室仪器中的每一个启动一个子过程。每个子进程通过串行接口与其仪器通信,并使用zmq管道与控制器进程发送和接收消息。当run.py进程生成子进程和控制器进程时,它会将连接字符串传递给每个进程。所有进程共享一个名为zmq_endpoint的模块,该模块包含一个管理系统消息传递的类。zmq_endpoint.py也位于顶级项目目录中。控制器和仪器驱动程序位于子目录或项目目录的子目录中使用多处理时从更高级别目录导入python,python,python-2.7,Python,Python 2.7,我的python2应用程序是用run.py启动的,它位于我的顶级项目目录中。它为许多实验室仪器中的每一个启动一个子过程。每个子进程通过串行接口与其仪器通信,并使用zmq管道与控制器进程发送和接收消息。当run.py进程生成子进程和控制器进程时,它会将连接字符串传递给每个进程。所有进程共享一个名为zmq_endpoint的模块,该模块包含一个管理系统消息传递的类。zmq_endpoint.py也位于顶级项目目录中。控制器和仪器驱动程序位于子目录或项目目录的子目录中 project/ run
project/
run.py
zmq_endpoint.py
...
controller/
controller.py
...
drivers/
instrument_type1/
instrument_driver_a.py
instrument_driver_b.py
instrument_type2/
instrument_driver_c.py
我正在pyCharm中开发,并且已经屈服于分配源根和资源根标记来导航棘手的python导入过程的诱惑。当我部署到我的linux目标时,一切都会中断。生成的进程不能使用..模块导入表示法,因为它们是由具有的运行模块独立生成的
Popen(['python', 'module.py', 'connection1', 'connection2'])
所有子进程都找不到zmq_endpoint.py
我已经在导入最佳实践方面搜索了好几天,但没有找到有效的答案。到目前为止,我已经尝试了以下选项:
import site; site.getsitepackages()
export PATH=$PATH:/home/project
export PATH=$PATH:/home/project
export PYTHONPATH=/home/project
非常感谢您的见解。您只能使用来自..模块的
导入。您的目录似乎不包含包,只有一堆脚本(no\uuuu init\uuuu.py
),因此,如果没有sys.path hack或类似工具,您无法从不同的目录导入。如果它们是包,您不应该直接以脚本的形式执行其中的文件,而应该使用python-m package.module…
或者最好有一个中心入口点。不,popen
在python中不是真正的多处理。要使用多核CPU的强大功能,请使用多处理
模块,该模块的API与线程
模块的API几乎相同。但是如何让这些子进程访问zmq_endpoint.py代码的目录级别?当然,有一种合适的方法可以做到这一点。