首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何扩展os.path以包含子模块

如何扩展os.path以包含子模块
EN

Stack Overflow用户
提问于 2015-07-10 16:19:42
回答 1查看 188关注 0票数 0

我用PyQt4做了一个简单的代码编辑器。

问题是,当打开和执行一个从属于一个子模块的文件时,即使在同一个文件夹中,它也找不到它们。

我尝试在编辑器中扩展os.path,这样它就像从windows中运行脚本一样。

我在这里读到的其他解决方案是堆栈溢出。只有当你知道所有子模块的名字是什么时,它才是唯一的解决方案。

Import * include submodules

How to do relative imports in Python?

代码语言:javascript
复制
import os
import sys
from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import *
from PyQt4.QtGui import *

os.path.join(os.path.expanduser('~'), os.path.expandvars('%Path%'))


try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_Form(object):
def setupUi(self, Form):
    Form.setObjectName(_fromUtf8("Form"))
    Form.resize(845, 848)
    self.runbtr = QtGui.QPushButton(Form)
    self.runbtr.setGeometry(QtCore.QRect(560, 670, 75, 23))
    self.runbtr.setObjectName(_fromUtf8("runbtr"))
    self.openbtr = QtGui.QPushButton(Form)
    self.openbtr.setGeometry(QtCore.QRect(680, 670, 75, 23))
    self.openbtr.setObjectName(_fromUtf8("openbtr"))
    self.textEdit = QtGui.QTextEdit(Form)
    self.textEdit.setGeometry(QtCore.QRect(30, 60, 701, 501))
    self.textEdit.setObjectName(_fromUtf8("textEdit"))

    self.retranslateUi(Form)
    QtCore.QMetaObject.connectSlotsByName(Form)

def retranslateUi(self, Form):
    Form.setWindowTitle(_translate("Form", "Form", None))
    self.runbtr.setText(_translate("Form", "run", None))
    self.openbtr.setText(_translate("Form", "open", None))
    self.runbtr.clicked.connect(self.runtext)
    self.openbtr.clicked.connect(self.openfile)

def runtext(self):
    exec str(self.textEdit.toPlainText())   


def openfile(self, path=None):
    if not path:
        path = QtGui.QFileDialog.getOpenFileName(self.openbtr, "Open File", '', "Python Files (*.py *.pyc *pyw)")

    if path:
        inFile = QtCore.QFile(path)
        if inFile.open(QtCore.QFile.ReadOnly | QtCore.QFile.Text):
            text = inFile.readAll()

            try:
                # Python v3.
                text = str(text, encoding='ascii')
            except TypeError:
                # Python v2.
                text = str(text)

            self.textEdit.setText(text)

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    Form = QtGui.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())

使用编辑器

代码语言:javascript
复制
import sys
print sys.path

显示窗口中的path变量

EN

回答 1

Stack Overflow用户

发布于 2015-07-10 19:00:09

我相信您所说的导入后第一行的意思是:

代码语言:javascript
复制
sys.path.extend(os.path.expandvars("%Path%").split(os.pathsep))
sys.path.append(os.path.expanduser("~"))

这几行代码将python env var中的所有文件夹添加到模块搜索路径中(我不确定这是不是一个好主意,因为有很多文件夹不包含或不应该包含PATH模块)+用户的HOME

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31335809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档