如何在模块的另一个文件的文件中获取路径?

时间:2019-04-26 09:30:34

标签: module path package perl6

如何获取模块的另一个文件的路径?

我以这种方式尝试过,但是我不知道从何处获得from PyQt4 import QtCore, QtGui def create_model(parent): model = QtGui.QStandardItemModel(parent) for i in range(3): parent_item = QtGui.QStandardItem("Family {}".format(i)) for j in range(3): child1 = QtGui.QStandardItem("Child {}".format(i * 3 + j)) child2 = QtGui.QStandardItem("row: {}, col: {}".format(i, j + 1)) child3 = QtGui.QStandardItem("row: {}, col: {}".format(i, j + 2)) parent_item.appendRow([child1, child2, child3]) model.appendRow(parent_item) return model class Widget(QtGui.QWidget): def __init__(self, parent=None): super(Widget, self).__init__(parent) self._tree_view = QtGui.QTreeView() self._tree_view.setModel(create_model(self)) self._tree_view.expandAll() lay = QtGui.QVBoxLayout(self) lay.addWidget(self._tree_view) self._tree_view.doubleClicked.connect(self.on_doubleClicked) @QtCore.pyqtSlot("QModelIndex") def on_doubleClicked(self, ix): print(ix.data()) gp = QtGui.QCursor.pos() lp = self._tree_view.viewport().mapFromGlobal(gp) ix_ = self._tree_view.indexAt(lp) if ix_.isValid(): print(ix_.data()) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) w = Widget() w.show() sys.exit(app.exec_()) ,而且我不知道如果我拥有from PySide import QtCore, QtGui def create_model(parent): model = QtGui.QStandardItemModel(parent) for i in range(3): parent_item = QtGui.QStandardItem("Family {}".format(i)) for j in range(3): child1 = QtGui.QStandardItem("Child {}".format(i * 3 + j)) child2 = QtGui.QStandardItem("row: {}, col: {}".format(i, j + 1)) child3 = QtGui.QStandardItem("row: {}, col: {}".format(i, j + 2)) parent_item.appendRow([child1, child2, child3]) model.appendRow(parent_item) return model class Widget(QtGui.QWidget): def __init__(self, parent=None): super(Widget, self).__init__(parent) self._tree_view = QtGui.QTreeView() self._tree_view.setModel(create_model(self)) self._tree_view.expandAll() lay = QtGui.QVBoxLayout(self) lay.addWidget(self._tree_view) self._tree_view.doubleClicked.connect(self.on_doubleClicked) @QtCore.Slot("QModelIndex") def on_doubleClicked(self, ix): print(ix.data()) gp = QtGui.QCursor.pos() lp = self._tree_view.viewport().mapFromGlobal(gp) ix_ = self._tree_view.indexAt(lp) if ix_.isValid(): print(ix_.data()) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) w = Widget() w.show() sys.exit(app.exec_()) 可以行得通吗?

$here

尝试此操作时,$here为空:

use v6;
unit class Aaa::Bbb::Ccc;

my $here = '.../lib/Aaa/Bbb/Ccc.pm6'.IO;
my $bin = $here.parent.parent.parent.add( 'bin' ).add( 'app' );

use Pod::Load;
my $pod = load( $bin );
# use the $pod

2 个答案:

答案 0 :(得分:8)

没有“模块的另一个文件”之类的东西。一个模块将只代表一个文件。分布表示多个模块,因此代表多个文件。此外,模块不能假定它是从文件系统中加载的-它可能是从tar filesocket加载到内存中的,并且如果某个模块尝试访问例如"../MyOtherModule.pm6".IO显然会失败。

可以安全地做的是获得同一发行版中任何模块的内容:

unit class Aaa::Bbb::Ccc;

my $bin-code = $?DISTRIBUTION.content("bin/app").open.slurp;

答案 1 :(得分:1)

更新: 正如@ugexe指出的那样,如果您打算安装模块,将无法正常工作。


$?DISTRIBUTION似乎是一个很好的解决方案。

否则,一种替代方法是使用$?FILE变量。如果要在程序的其他位置使用它,则需要从模块中导出它:

unit module MyModule;

our sub myDIR() {
    $?FILE.IO.dirname;
}
use MyModule;
myDIR()~"/relative/path/to/somefile