2016-06-22 14 views
1

パッケージを作成して、パッケージ内にテストを作成しています。 1つのテストでは、入力はファイルのセットで、出力はテストで作成されたファイルとは別のセットになります。ファイルインポートのデフォルトパスJulia

私のパッケージのテストディレクトリに入力ファイルを保存しており、出力ファイルもそこに保存したいと考えています。他の人がこのテストを実行する可能性があるので、私は/home/myname/.julia/v4.0/MyPackage/test/MyInputFile.txtなどの自分のパスを使って入出力ファイルの場所を指定したくありません。 入力場所がパッケージのテストフォルダ内にありますか?

基本的に私はジュリアにテストディレクトリ下のパッケージのフォルダを見て、ユーザー名などのパス全体を指定することを心配する必要はないと伝えますか?

例えば、現在、私は

readtable(/home/myname/.julia/v4.0/MyPackage/test/MyInputFile.txt, separator = '\t', header = false) 

を言っているしかし、私はちょうど

readtable(/MyPackage/test/MyInputFile.txt, separator = '\t', header = false) 

ように関係なく、パッケージの利用者が誰であるか、彼らの言うことできるようにしたいのですがパッケージを保存することができます、彼らはまだテストを実行できますか?

私は、LOAD_PATHがJuliaがパッケージを探すパスを知っていますが、ファイルのインポート時にどこに情報があるのか​​わかりません。

+0

'joinpath(Pkg.dir(" MyPackage ")、" test ")'は必要なものです。 – Gnimuc

答えて

1

@GnimucKコメントで述べたように、よりよい解決策は

dirname(@__FILE__) 

はなぜこれが優れているのですか?パッケージは、他の場所(標準のパッケージディレクトリではない)からインストールして使用することができます。 Pkg.dirは "愚か"であり、良く分かっていません。これはまれですが、ほとんどの場合、重要ではありません。

+0

どうすればこれを実際に使用できますか?たとえば、 "thisfile.jl"という名前のファイルのディレクトリパスを探したいとしたら?私はdirname(@ __ thisfile.jl__)とdirname(thisfile.jl)とdirname(@ thisfile.jl)を試しましたが、これらの作業はありませんでした。 – lara

+0

@ user3061923 '@__ FILE__'を文​​字どおりに入力してください。これは、現在のファイル名に解決されるマクロです。 –

+0

だから私はそのdirname(@ _ FILE__)を正確に行いました。私が得たリターンはちょうど ""でした。私は本当にここで何が起こっているのか分かりません。なぜそれが戻ってくるのですか?そして、Juliaに私がファイルMyPackage/test/MyInputFile.txtを具体的に探していることを伝える単純な入力はどのようにして行われますか? – lara

2

joinpath(Pkg.dir("MyPackage"), "test")が必要です。

+1

Gnimuc Kさん、ありがとうございます。 – lara

+1

一般に、 'dirname(@__ FILE __)'はあなたがパッケージで作業していなくても.jlファイルの絶対パスを与えます。 – Gnimuc