質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
make

make は、ビルド作業を自動化するツールです。さまざまなファイルの最終変更時刻を比較し、従属するファイルよりも「ターゲット」のファイルが古いことがわかったときユーザーが設定していた命令を実行する事が可能です。

makefile

make は、プログラムのビルド作業を自動化するツールです。コンパイル、リンク、インストール等のルールを記述したテキストファイルをmakefileと呼び、このルールに従ってmakeが自動的にビルドを実行する。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

3163閲覧

pythonファイルのmakefileでの実行

hiro329

総合スコア19

make

make は、ビルド作業を自動化するツールです。さまざまなファイルの最終変更時刻を比較し、従属するファイルよりも「ターゲット」のファイルが古いことがわかったときユーザーが設定していた命令を実行する事が可能です。

makefile

make は、プログラムのビルド作業を自動化するツールです。コンパイル、リンク、インストール等のルールを記述したテキストファイルをmakefileと呼び、このルールに従ってmakeが自動的にビルドを実行する。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/11/19 00:39

編集2018/11/19 05:38

イメージ説明例題でmakefileで実行してファイルを作成するものがあります。
しかし、makefileの実行方法がわかりません。
昔、Cで組み込み開発していた時は、パスを通して実行していた記憶がありますが、忘れてしまっています。
pythonのmakefileはどのように実行したらいいのでしょうか。
https://sourceforge.net/projects/gnuwin32/
をインストールしてパスを通せばいいと、検索したHPにはかいてありましたがうまくいきません。
環境変数の設定の方法が違っているのでしょうか。
環境変数は新規作成で名前、値はどのような値を与えてやればいいのでしょうか。
基本的な質問になるかとは思いますが、これが進まなくて先に進めません。
よろしくおねがいいたします。
makefileの中身は、以下になります。

makefile

CORPUS_URL = http://mmsrv.ninjal.ac.jp/nucc/nucc.zip ZIP_FILE = nucc.zip UNZIP_DIR = nucc WGET = wget UNZIP = unzip PYTHON = python CONV = mksequence.py SEQFILE = sequence.txt all: $(SEQFILE) clean: -rm -r $(UNZIP_DIR) rm $(SEQFILE) clean-all: clean rm -f $(SEQFILE): $(UNZIP_DIR) $(PYTHON) $(CONV) > $(SEQFILE) download: $(ZIP_FILE) nucc.zip: $(WGET) $(CORPUS_URL) $(UNZIP_DIR): nucc.zip $(UNZIP) -x $(ZIP_FILE)
-*- coding: utf-8 -*- import os, sys try: unicode import codecs sys.stdout = codecs.getwriter('utf-8')(sys.stdout) def copen(fname, mode): return codecs.open(fname, mode, "utf-8") except: def copen(fname, mode): return open(fname, mode, encoding='utf-8') nuc_dir = "nucc" def make_sequence_from_file(fname): fname = os.path.join(nuc_dir, fname) if not os.path.exists(fname): raise Exception("no %s file." % fname) last_line = None sequence = [] with copen(fname, "r") as f: try: for line in f: uline = line if uline[0] == u'@': continue if uline[0] == u'F' or uline[0] == u'M': if last_line is None: last_line = uline continue else: seq_input = last_line[5:-1] seq_output = uline[5:-1] last_line = uline sequence.append((seq_input, seq_output)) else: last_line = None except: sys.stderr.write("skip %s (not euc-jp)\n" % fname) sys.stderr.flush() return [] return sequence def main(): if not os.path.exists(nuc_dir): raise Exception("no extracted files.") files = os.listdir(nuc_dir) uniq_seq = {} for f in files: if not ".txt" in f: continue seq = make_sequence_from_file(f) for inp, out in seq: uniq_seq[inp] = out for k, v in uniq_seq.items(): print("input: %s\noutput: %s" % (k, v)) return if __name__ == "__main__": main() sys.exit(0) # コード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

  1. makefileのインデントが不明なこと
  2. mksequence.pyの内容が不明なこと

から、ひとまずMakefileをコピー&適当にインデントを調整して実行しました。

結果、再現しませんでした。正常に動きました。

ですので、

  1. Makefileを「```」で囲ってインデントを見せてください。
  2. mksequence.py の内容を追記してください。

投稿2018/11/19 01:20

kazto

総合スコア7196

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiro329

2018/11/19 01:33

大変申し訳ございません。 回答いただきありがとうございます。 以下になります。 makefile ``` # download page: https://nknet.ninjal.ac.jp/nuc/templates/nuc.html CORPUS_URL = http://mmsrv.ninjal.ac.jp/nucc/nucc.zip ZIP_FILE = nucc.zip UNZIP_DIR = nucc WGET = wget UNZIP = unzip PYTHON = python CONV = mksequence.py SEQFILE = sequence.txt all: $(SEQFILE) clean: -rm -r $(UNZIP_DIR) rm $(SEQFILE) clean-all: clean rm -f $(SEQFILE): $(UNZIP_DIR) $(PYTHON) $(CONV) > $(SEQFILE) download: $(ZIP_FILE) nucc.zip: $(WGET) $(CORPUS_URL) $(UNZIP_DIR): nucc.zip $(UNZIP) -x $(ZIP_FILE) ``` python.py # -*- coding: utf-8 -*- import os, sys try:  unicode import codecs sys.stdout = codecs.getwriter('utf-8')(sys.stdout) def copen(fname, mode): return codecs.open(fname, mode, "utf-8") except: def copen(fname, mode): return open(fname, mode, encoding='utf-8') nuc_dir = "nucc" def make_sequence_from_file(fname): fname = os.path.join(nuc_dir, fname) if not os.path.exists(fname): raise Exception("no %s file." % fname) last_line = None sequence = [] with copen(fname, "r") as f: try: for line in f: uline = line if uline[0] == u'@': continue if uline[0] == u'F' or uline[0] == u'M': if last_line is None: last_line = uline continue else: seq_input = last_line[5:-1] seq_output = uline[5:-1] last_line = uline sequence.append((seq_input, seq_output)) else: last_line = None except: sys.stderr.write("skip %s (not euc-jp)\n" % fname) sys.stderr.flush() return [] return sequence def main(): if not os.path.exists(nuc_dir): raise Exception("no extracted files.") files = os.listdir(nuc_dir) uniq_seq = {} for f in files: if not ".txt" in f: continue seq = make_sequence_from_file(f) for inp, out in seq: uniq_seq[inp] = out for k, v in uniq_seq.items(): print("input: %s\noutput: %s" % (k, v)) return if __name__ == "__main__": main() sys.exit(0) になります。 もとのソースの場所は、githubのhttps://github.com/knok/make-meidai-dialogue になります。 お手数かとは思いますが、よろしくお願いいたします。
kazto

2018/11/19 01:35

コメントですと、インデントがわかりません。質問本文を修正する形でお願いします。 MakefileにしてもPythonにしても、インデントが重要です。
hiro329

2018/11/19 01:36

CORPUS_URL = http://mmsrv.ninjal.ac.jp/nucc/nucc.zip ZIP_FILE = nucc.zip UNZIP_DIR = nucc WGET = wget UNZIP = unzip PYTHON = python CONV = mksequence.py SEQFILE = sequence.txt all: $(SEQFILE) clean:    -rm -r $(UNZIP_DIR)    rm $(SEQFILE) clean-all: clean    rm -f $(SEQFILE): $(UNZIP_DIR)    $(PYTHON) $(CONV) > $(SEQFILE) download: $(ZIP_FILE) nucc.zip:    $(WGET) $(CORPUS_URL) $(UNZIP_DIR): nucc.zip    $(UNZIP) -x $(ZIP_FILE) ```
kazto

2018/11/19 01:42

Windowsとのことで、コマンドプロンプトを開いた状態で「python -V」の実行結果はどのように出力されますでしょうか。
hiro329

2018/11/19 01:43

# -*- coding: utf-8 -*- import os, sys try: unicode import codecs sys.stdout = codecs.getwriter('utf-8')(sys.stdout) def copen(fname, mode): return codecs.open(fname, mode, "utf-8") except: def copen(fname, mode): return open(fname, mode, encoding='utf-8') nuc_dir = "nucc" def make_sequence_from_file(fname): fname = os.path.join(nuc_dir, fname) if not os.path.exists(fname): raise Exception("no %s file." % fname) last_line = None sequence = [] with copen(fname, "r") as f: try: for line in f: uline = line if uline[0] == u'@': continue if uline[0] == u'F' or uline[0] == u'M': if last_line is None: last_line = uline continue else: seq_input = last_line[5:-1] seq_output = uline[5:-1] last_line = uline sequence.append((seq_input, seq_output)) else: last_line = None except: sys.stderr.write("skip %s (not euc-jp)\n" % fname) sys.stderr.flush() return [] return sequence def main(): if not os.path.exists(nuc_dir): raise Exception("no extracted files.") files = os.listdir(nuc_dir) uniq_seq = {} for f in files: if not ".txt" in f: continue seq = make_sequence_from_file(f) for inp, out in seq: uniq_seq[inp] = out for k, v in uniq_seq.items(): print("input: %s\noutput: %s" % (k, v)) return if __name__ == "__main__": main() sys.exit(0) #
kazto

2018/11/19 01:45

重ねて申し上げます。コメントではなく、質問本文を修正してください。
kazto

2018/11/19 01:46

コメントではインデントをつけるのが困難です。
hiro329

2018/11/19 01:46

python自体認識されていないようです。。。 VSCで2.7と3.6でつかっていたのですが、windowsでパスを通す必要性があるのでしょうか。 もし牛わけないのですが、pythonのソースですが、うまくはりつけられないので、githubをみてもらってもいいでしょうか。 https://github.com/knok/make-meidai-dialogue になります。 よろしくおねがいいたします。
kazto

2018/11/19 01:50

「認識されていない」とは、どのような状態でしょうか。 PATHに含まれていないならば 「’python’は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません。」 といったメッセージがでるかと思います。これが出ていますか?
hiro329

2018/11/19 01:52

はい。そのメッセージが出ています。pythonのパスは通す必要性があるのでしょうか?
hiro329

2018/11/19 01:52

ほんと申し訳ございません。
hiro329

2018/11/19 01:54

pythonのソースを一番上の質問欄に張り付けました。 お手数をかけて申し訳ございません。
kazto

2018/11/19 01:55

そうですね、PATHの問題のようです。 コマンドプロンプトで「echo %PATH%」とした結果にpythonのパスが含まれれていなければ、間違い無いでしょう。 PATHの追加方法はご存じでしょうか。
hiro329

2018/11/19 02:00

申し訳ないです。 環境変数に追加すればいいというのはわかっているのですが、昔はできたのですが忘れてしまって、具体的にどのように書いていいのかいまいちわかりません。 もしよろしければ教えていただければ幸いです。 あと、バージョン、2.7と3.7があるのですが、それぞれパスを通して使い分けることはできるのでしょうか? このpythonソース、3.7では動かないといった記述もあるので正常に動くのかわからないので、、、、 お手数おかけしますがよろしくお願いいたします。
hiro329

2018/11/19 02:04

基本的な質問で申し訳ないのですが、パスは、windowsのコマンドプロンプトで通す感じでいいのでしょうか。pythonの環境としてanacondaをつかっていますが、そちらでとおすのでしょうか?
kazto

2018/11/19 02:09

わかりました。 まず、Pythonのありかを確認しましょう。 だいたい「C:\Users\xxx\Anaconda3」とかにインストールされていることが多いですが、本当にそこにあるかエクスプローラで確認しましょう。 次に、システムの環境設定→詳細設定→環境変数とたどり、環境変数の設定ダイアログを開きます。 システムの環境変数内のPathを右クリック、編集で編集します。 パスの先頭に C:\Users\xxx\Anaconda3 C:\Users\xxx\Anaconda3\Scripts を「;」区切りで連結して追加してください。
hiro329

2018/11/19 02:37

回答ありがとうございます。 ご指摘いただいた通りに、Anaconda3直下にpython.exeがあったので、環境変数のところにご指摘いただいた通りに追加しました。 pythonは無事認識できるようになりました。 しかし、makeファイルが認識されません。 'make'は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されません。 とでます。 検索していて、makefileはhttps://sourceforge.net/projects/gnuwin32/をインストールしてパスを通す必要性があるとあったのでインストールしたのですが、うまくいきません。 何度も質問して申し訳ないのですが、どのようにmakeを通していいのか教えていただけませんでしょうか。 大変申し訳ございません。。。
kazto

2018/11/19 03:19

Pythonのパスを追加した際に、Pathを壊しましたね。。。
kazto

2018/11/19 03:24

一般的なPathの通し方は、「exeのありかを確認する」→「環境変数に追加する」の2点ですが、 気をつける点としては既存の物を壊さないように追加すること、でしょうか。
hiro329

2018/11/19 04:02

makeは、最初から認識されていないと出てるのですが。。。。。。 pythonのパスの追加は、言われた以外は何もしていません。。。 なにがいけなかったのでしょうか。。。。 もう、治す方法はないのでしょうか。。。 もうしわけないです。。。
hiro329

2018/11/19 04:05

エラー自体は、何も変わっていないのですが、、、、
kazto

2018/11/19 04:11

ん?ちょっと待ってください。 makeを実行した結果、pythonが見つかりません、というのが最初の状態ではなかったのでしょうか。 それとも、makeコマンドが見つかりません、が最初の状態で間違いないですか? gnuwin32のインストール先はわかりますでしょうか。
hiro329

2018/11/19 04:22

makeコマンドが見つかりませんが、初期条件でした。 で、いまいろいろやってみたのですが、とりあえず、makeは実行できてるような感じなのですが次のようなエラーが出ます。 wget http://mmsrv.ninjal.ac.jp/nucc/nucc.zip process_begin: CreateProcess(NULL,http://mmsrv.ninjal.ac.jp/nucc/nucc.zip)failed make(e=2)指定されたファイルが見つかりません make:**[nucc.zip]エラー2 これは、ダウンロードに失敗しているのでしょうか。 kazto様が、このmakeを走らせた場合うまくいきますでしょうか? なんか、いろいろと誤解を生んでしまって申し訳ないです。 pythonのパスが通ってなかったのも、問題だったと思います。 ありがとうございます。
hiro329

2018/11/19 04:25

gnuwin32のインストール先は、C:\Program Files (x86)\GnuWin32\binになります。 よろしくおねがいします。
kazto

2018/11/19 04:36

make動きましたね。良かった。 では次は、wgetコマンドはインストールしましたでしょうか。
hiro329

2018/11/19 05:13

すみません、wgetですがサイトを調べてて、インストールしようとしたのですが、以前インストールしたGnuwin32のページと同じページで、wgetを入れようとすると怒られます。しょうがないので、適当な場所にフォルダを作ってインストールしたのですが、Gnuwin32の内容と同じような気がします。 基本的に見るところが間違っているのでしょうか。 https://sourceforge.net/projects/gnuwin32/files/wget/1.11.4-1/wget-1.11.4-1-setup.exe/download?use_mirror=jaist&r=http%3A%2F%2Fgnuwin32.sourceforge.net%2Fpackages%2Fwget.htm&use_mirror=jaist これではないのでしょうか? 一応、wget-.11.4--setupとなっていますが、、、、 無理やり上書きとかするのも怖いですし、できるのかもわからないですし。。。 これでいいのか謎です。 とても、初歩的な質問で申し訳ないのですが、ご教授願えると幸いです。 よろしくお願いいたします。
hiro329

2018/11/19 05:14

インストールされているかどうかはどう調べたらいいのでしょうか。 wgetというexeをさがせばいいのでしょうか。。。。。 ほんと、すみません。。。
hiro329

2018/11/19 05:19

すみません。いろいろやってみて、さっき落としたところをパスを通したら、とりあえず動きました。 ただ、証明エラーが出ておとせませんが、、、、; ;
kazto

2018/11/19 05:22

謝る必要はありませんよ。問題を一つずつ解決していきましょう。 makeが実行できるので、GnuWin32にパスは通っているとして、「wget --help」でヘルプが出るなら、インストールずみでしょう。 認識されていませんのメッセージが無いなら、インストールされていないと考えられます。 エラーの全文を追記お願いします。
hiro329

2018/11/19 05:35

wget --helpは、正常に出力されています。 ダウンロードのところでこけているようです。 普通に、ブラウザからダウンロードするとダウンロードできるのに、Not foundになって、認証エラーなどいろいろ出力されダウンロードされずに、終了してしまいます。 エラーは、画面張り付けられるのでしょうか。。。
kazto

2018/11/19 05:37

コマンドプロンプトから文字をコピー&ペーストする方法がわからない感じでしょうか。 右クリック→範囲選択、で範囲を選択し、リターンキーでコピーできます。
hiro329

2018/11/19 05:39

エラー画面張り付けました。
kazto

2018/11/19 05:43

エラーありがとうございます。 これは、WgetがSSL証明書を厳し目にチェックしてしまうために起きているエラーですね。 Makefileを1行書き換える必要があります。上の方にある行で WGET = wget を WGET = wget --no-check-certificate に書き換えてください。
hiro329

2018/11/19 06:03

親切にありがとうございます。 とりあえず、makeすると、ファイルはダウンロードするようになりました。 しかし、make allコマンドはなぜか通りません。 とりあえず、makeすると、以下のようになり、エラー出て止まります。 pythonファイルが走りません。 ----------------------------------------------------------------------------- (base) C:\Users\toyoshi\meidai_text>make wget --no-check-certificate http://mmsrv.ninjal.ac.jp/nucc/nucc.zip SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc syswgetrc = C:\wget\GnuWin32/etc/wgetrc --2018-11-19 14:59:39-- http://mmsrv.ninjal.ac.jp/nucc/nucc.zip mmsrv.ninjal.ac.jp をDNSに問いあわせています... 202.245.100.91 mmsrv.ninjal.ac.jp|202.245.100.91|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 302 Found 場所: https://mmsrv.ninjal.ac.jp/nucc/nucc.zip [続く] --2018-11-19 14:59:39-- https://mmsrv.ninjal.ac.jp/nucc/nucc.zip mmsrv.ninjal.ac.jp|202.245.100.91|:443 に接続しています... 接続しました。 警告: mmsrv.ninjal.ac.jp の証明書(発行者: /C=--/ST=SomeState/L=SomeCity/O=SomeOr ganization/OU=SomeOrganizationalUnit/CN=mmsrv/emailAddress=root@mmsrv)の検証に失 敗しました: 自己署名証明書です。 警告: 証明書に記載されている名前 `mmsrv' とホスト名 `mmsrv.ninjal.ac.jp' が一致 しません HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 2187379 (2.1M) [application/zip] `nucc.zip' に保存中 100%[======================================>] 2,187,379 7.82M/s 時間 0.3s 2018-11-19 14:59:39 (7.82 MB/s) - `nucc.zip' へ保存完了 [2187379/2187379] unzip -x nucc.zip process_begin: CreateProcess(NULL, unzip -x nucc.zip, ...) failed. make (e=2): 指定されたファイルが見つかりません。 make: *** [nucc] エラー 2 -----------------------------------------------------------------------------
hiro329

2018/11/19 06:06

すみません。 make allも走りましたが、おなじところでとまります。。。。。 もう、わけわからなくなってきました、、、、、
kazto

2018/11/19 06:06

wgetの時と同じですね。unzipがインストールされていません。
hiro329

2018/11/19 06:22

たびたび、初歩的なミスで大変申し訳ございません。 なんとか、pythonのところまで、動かすことができました。 ただ、3.7だとうまく動かないかもしれないとかかかれていたところがあったので、以下のエラーが出ます。 これは、pythonのバージョンを変えるとかいろいろさわらないとだめなんでしょうか。 わかる範囲で教えていた誰ば幸いです。 python初めて、まだ1か月半なので、いまいちわかっておりません。 ほんとうに、長々とお付き合いいただきありがとうございます。 エラーは以下になります。 ----------------------------------------------------------------------------- inflating: nucc/data121.txt inflating: nucc/data122.txt inflating: nucc/data123.txt inflating: nucc/data124.txt inflating: nucc/data125.txt inflating: nucc/data126.txt inflating: nucc/data127.txt inflating: nucc/data128.txt inflating: nucc/data129.txt python mksequence.py > sequence.txt Traceback (most recent call last): File "mksequence.py", line 64, in <module> main() File "mksequence.py", line 59, in main print("input: %s\noutput: %s" % (k, v)) UnicodeEncodeError: 'cp932' codec can't encode character '\u2014' in position 19 : illegal multibyte sequence make: *** [sequence.txt] エラー 1 -----------------------------------------------------------------------------
kazto

2018/11/19 06:49

data○○.txt内にShift_JISで解釈できないバイナリが含まれていることに起因するエラーですね。 スクリプトを直すよりは、おそらくpython2.7をインストールするのが一番近道かと思います。
hiro329

2018/11/19 07:09

kazto様 2.7をいれてやったら、うまくいきました。 今日一日本当にありがとうございました。 いろいろと、勉強になり、また問題も解決できました。 ほんとうにありがとうございました。
guest

0

make と打ったら何が出てきますか?
みるところ、Linux向けのスクリプトのようですが、OSはなんでしょうか

投稿2018/11/19 01:14

編集2018/11/19 01:15
y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiro329

2018/11/19 01:17

windows8.1です。 とりあえず、コマンドを認識してもらえてませんです。 windowsでは、実行は不可能なのでしょうか。 これが、進まないと例題のファイルをはいてもらえないので困っているのですが。。。 Linux環境を用意する必要性があるのでしょうか。 どうぞよろしくおねがいいたします。
y_waiwai

2018/11/19 01:27

その例題を出したひとに聞いてください、としかいいようがないですが。
hiro329

2018/11/19 02:41

HPに公開されているので、連絡を取れれば聞くのですが、聞く手段がないため、ここで質問させていただきました。大変申し訳ございません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問