我正在使用Python开发一个包含计算引擎和前端的系统。我将它们分成两个项目,因为计算引擎也可以用于其他前端。
我正在使用Eclipse和PyDev。一切都在Eclipse / PyDev中完美运行,但是一旦我尝试在PyDev之外运行它(从命令行)我就会导入错误。我已经做了很多研究来找到问题,但我还没有看到一个很好的解决方案。我相信PyDev会修改Python路径。
在我的项目布局中,我在一个项目(计算)中有两个包(package1和tests)。我似乎无法在测试中从package1导入任何东西。我还有另一个项目(前端)。在这里,我也无法从package1导入任何内容。
我想了解的是从命令行调用脚本/测试文件的正确方法?两个单独的项目和同一个项目中的两个包。我认为它与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
对我的项目布局的评论也将受到赞赏。
答案 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)
我希望它能对您有所帮助:)