运行 Ecplise/PyDev 来自命令行的项目
Run Ecplise/PyDev project from command line
我正在 Python 开发一个系统,其中包括一个计算引擎和一个前端。我将它们分成两个项目,因为计算引擎也可以用于其他前端。
我正在使用 Eclipse 和 PyDev。在 Eclipse/PyDev 中一切正常,但是当我尝试在 PyDev 之外(从命令行)运行 它时,我会遇到导入错误。我已经做了很多研究来找出问题所在,但我只是看不到有效的解决方案。我相信 PyDev 会修改 Python 路径。
在我下面的项目布局中,我在一个项目(计算)中有两个包(package1 和测试)。我似乎无法在测试中从 package1 导入任何东西。我还有另一个项目(前端)。在这里我也无法从 package1 导入任何东西。
我想了解的是从命令行调用 script/tests 文件的正确方法?对于两个单独的项目和同一项目中的两个包。 我认为它与 PyDev 的做法类似。到目前为止,我认为我有以下选择:
- 创建 python 代码附加到 sys.path(似乎 hacky/not 好的做法)
- 当我这样调用test_some_calc.py时修改PYTHONPATH:PYTHONPATH=pythontest_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
对我的项目布局的评论也将不胜感激。
从系统的任何位置包含某些 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)
希望对您有所帮助:)
我正在 Python 开发一个系统,其中包括一个计算引擎和一个前端。我将它们分成两个项目,因为计算引擎也可以用于其他前端。
我正在使用 Eclipse 和 PyDev。在 Eclipse/PyDev 中一切正常,但是当我尝试在 PyDev 之外(从命令行)运行 它时,我会遇到导入错误。我已经做了很多研究来找出问题所在,但我只是看不到有效的解决方案。我相信 PyDev 会修改 Python 路径。
在我下面的项目布局中,我在一个项目(计算)中有两个包(package1 和测试)。我似乎无法在测试中从 package1 导入任何东西。我还有另一个项目(前端)。在这里我也无法从 package1 导入任何东西。
我想了解的是从命令行调用 script/tests 文件的正确方法?对于两个单独的项目和同一项目中的两个包。 我认为它与 PyDev 的做法类似。到目前为止,我认为我有以下选择:
- 创建 python 代码附加到 sys.path(似乎 hacky/not 好的做法)
- 当我这样调用test_some_calc.py时修改PYTHONPATH:PYTHONPATH=pythontest_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
对我的项目布局的评论也将不胜感激。
从系统的任何位置包含某些 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)
希望对您有所帮助:)