4

我想用pydev在python中做一些脚本。我遇到的问题是我无法在脚本所在的项目目录中启动控制台,控制台在 pydev/aptana 文件夹中启动(在 aptana 文件夹中的某个位置)。

我可以在我的脚本中添加以下代码来解决这些问题:

import os
import inspect
filename = inspect.getframeinfo(inspect.currentframe()).filename
curpath = os.path.dirname(os.path.abspath(filename))
os.chdir(curpath)

有人知道如何在通过 pydev ++Ctrl方式启动时自动将控制台的目录更改为项目位置路径吗?AltEnter

- 编辑 -

如果有人更喜欢,这是我自己的解决方案:

import sys; print('%s %s' % (sys.executable or sys.platform, sys.version)) import os;os.chdir([p for p in os.environ['PYTHONPATH'].split(os.pathsep) if ('Aptana Workspace' in p)][0]) pwd()
4

3 回答 3

3

我在 Preferences -> PyDev -> Interactive Console -> Initial Commands 中将以下内容添加到我的预执行脚本中:

import os
import inspect

__old_runfile = runfile

def runfile(file):
    curpath = os.path.dirname(os.path.abspath(file))
    os.chdir(curpath)
    __old_runfile(file)

这会覆盖默认的 runfile 命令并导致Ctrl++在加载Alt脚本Enter时更改为脚本的目录。

于 2015-02-27T00:03:17.900 回答
2

我使用了一些技巧来完成这项工作。如果我理解您的问题,您希望将 IPython 环境中的当前工作目录设置为活动文件所在的目录。因此,如果您正在编辑 D:/projects/file.py,您希望 pwd() 命令(在 IPython 中)返回 D:/projects。这就是我的解决方案中被破解的部分的来源。我所有的项目都在我的 D 驱动器上,但是所有正常的 python 导入都来自我的 C 驱动器上的安装位置。所以以下内容:

os.environ['PYTHONPATH'].split(os.pathsep)

生成一个列表,其中只有一个路径位于我的活动文件目录的 D 驱动器上(因为 PyDev 将 PYTHONPATH 设置为包含正确的目录)。如果您不使用 D 驱动器,那么应​​该有一些其他独特的方式来识别该列表中哪些路径与您的项目相关(例如在 Documents 或 My Documents 中等)。如果没有唯一标识您的项目路径的方法,那么这个答案不起作用。但是在“D:/”这个简单的例子中,这是一个足够的唯一标识符,这是我在设置中的启动代码(Window > Preferences > PyDev > Interactive Console)

import sys; print('%s %s' % (sys.executable or sys.platform, sys.version))
import os;os.chdir([p for p in os.environ['PYTHONPATH'].split(os.pathsep) if p.startswith("D")][0])
pwd()
于 2013-01-09T02:03:08.367 回答
0

我遇到了同样的问题,刚刚找到了另一个解决方案。它类似于已经提到的那些,但在 eclipse/pydev 中完全可配置(无需修改脚本)。

  1. 在 Window -> Preferences -> PyDev -> Interpreters -> Python Interpreter 中选择 tab Environment 并添加一个新变量,名称 为PROJECT_PATH(或您选择的任何内容)和 Value ${project_loc}(这是项目文件夹的绝对路径) .
  2. 然后在 Window -> Preferences -> PyDev -> Interactive Console -> Initial Command 添加行import os; os.chdir(os.environ['PROJECT_PATH'])

(如果您启动“当前工作编辑器的控制台”,它会起作用。)

于 2015-12-26T01:01:54.137 回答