从命令行运行Ecplise / PyDev项目

时间:2015-11-21 08:20:03

标签: python eclipse pydev

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

我正在使用Eclipse和PyDev。一切都在Eclipse / PyDev中完美运行,但是一旦我尝试在PyDev之外运行它(从命令行)我就会导入错误。我已经做了很多研究来找到问题,但我还没有看到一个很好的解决方案。我相信PyDev会修改Python路径。

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

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

  • 创建python代码以附加到sys.path(似乎hacky / not good practice)
  • 当我调用test_some_calc.py时修改PYTHONPATH:PYTHONPATH = python test_some_calc.py(我想这就是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

对我的项目布局的评论也将受到赞赏。

2 个答案:

答案 0 :(得分:1)

从系统中的任何位置包含某些python的干净,快速和模块化的方法是创建一个名为mymodule.pth的文件并将其放在site-packages的路径中

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

例如put:

  

Linux

     
    

/家庭/用户/ myproject的

  
     

里面

     
    

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

  

  

Windows

     
    

C:\\ Users \ myUsername \ My Documents \ myproject

  
     

     
    

C:\ PythonXY \ LIB \站点包\ mymodule.pth

  

答案 1 :(得分:0)

我写了一个脚本来从PyDev的项目属性中加载PYTHONPATH。允许您从控制台运行代码,而不会出现诸如“ ModuleNotFoundError:没有名为...的模块”之类的问题。

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)

我希望它能对您有所帮助:)