运行 Ecplise/PyDev 来自命令行的项目

Run Ecplise/PyDev project from command line

我正在 Python 开发一个系统,其中包括一个计算引擎和一个前端。我将它们分成两个项目,因为计算引擎也可以用于其他前端。

我正在使用 Eclipse 和 PyDev。在 Eclipse/PyDev 中一切正常,但是当我尝试在 PyDev 之外(从命令行)运行 它时,我会遇到导入错误。我已经做了很多研究来找出问题所在,但我只是看不到有效的解决方案。我相信 PyDev 会修改 Python 路径。

在我下面的项目布局中,我在一个项目(计算)中有两个包(package1 和测试)。我似乎无法在测试中从 package1 导入任何东西。我还有另一个项目(前端)。在这里我也无法从 package1 导入任何东西。

我想了解的是从命令行调用 script/tests 文件的正确方法?对于两个单独的项目和同一项目中的两个包。 我认为它与 PyDev 的做法类似。到目前为止,我认为我有以下选择:

我有以下项目布局。

CodeSolution/
    Calculations/
       package1/
           __init__.py
           subpackage/
               __init__.py
               some_calc.py
           subpackage2/
               __init__.py
               another_calc.py
       tests/
           __init__.py
           subpackage/
               __init__.py
               test_some_calc.py  # Unable to import from package1
           subpackage2/
               __init__.py
               test_another_calc.py  # Unable to import from package1
    Frontend/
        some_script.py  # Unable to import from package1

对我的项目布局的评论也将不胜感激。

从系统的任何位置包含某些 python 的干净、快速和模块化的方法是制作一个名为 mymodule.pth 的文件并将其放在站点包的路径中

mymodule.pth 应该有你项目的路径。项目文件夹必须有一个 __init__.py 文件。

例如:

for Linux:

/home/user/myproject

里面

/usr/lib/python2.7/site-packages/mymodule.pth

for Windows

C:\Users\myUsername\My Documents\myproject

里面

C:\PythonXY\Lib\site-packages\mymodule.pth

我写了一个脚本来从 PyDev 的项目属性中加载 PYTHONPATH。它允许您从控制台 运行 您的代码而不会出现 "ModuleNotFoundError: No module named ...".

等问题
import sys
from xml.dom import minidom
import os

print(sys.path)
def loadPathsFromPyDev():
    sys_path = sys.path[0]
    # Load XML
    xmldoc = minidom.parse(sys_path+'\.pydevproject')
    # Get paths
    xmlpaths = xmldoc.getElementsByTagName('path')
    # Get paths' values
    paths = list()    
    for xmlpath in xmlpaths:
        paths.append(xmlpath.firstChild.data)
    # set path variable
    for path in paths:
        # Set backslashes to forwardslashes
        path = os.path.normpath(path)
        # Set string's sys_path
        path = path.replace("${PROJECT_DIR_NAME}", sys_path)
        if path not in sys.path:
            # Add to system path
            sys.path.insert(1,path)

loadPathsFromPyDev()
print(sys.path)

希望对您有所帮助:)