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

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

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

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

Q&A

解決済

2回答

9333閲覧

python上の環境変数をpyファイルの中で設定する事ができない

koikogarey

総合スコア52

Python

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

0グッド

0クリップ

投稿2019/04/09 05:41

編集2019/04/09 06:20

export環境変数を自動で設定させたいです。
もしも可能なのであればpy上で実行させたいです。→できないという指摘あり
py上で設定する事にこだわりは一切ありません。
exportではjsonで環境設定をしているのですが、
毎日設定しなければいけませんので自動で設定できればOKです。

実際にshellでたたく対象コマンドは以下1文です。

export mogemoge.json

manage.pyを実行するとエラーがおきます。

manage.pyの中身

import os import subprocess #環境変数設定対策 cmd = "export mogemoge.json" runcmd = subprocess.call(cmd.split()) print (runcmd)

manage.pyファイルを実行したときのエラー内容

Traceback (most recent call last): File "manage-file.py", line 6, in <module> runcmd = subprocess.call(cmd.split()) File "/usr/lib/python3.5/subprocess.py", line 247, in call with Popen(*popenargs, **kwargs) as p: File "/usr/lib/python3.5/subprocess.py", line 676, in __init__ restore_signals, start_new_session) File "/usr/lib/python3.5/subprocess.py", line 1282, in _execute_child raise child_exception_type(errno_num, err_msg) FileNotFoundError: [Errno 2] No such file or directory: 'export'

ためしたこと

ためしに上記ソースのコマンドだけ変更するため
pipコマンドをcmdに入れると正常にpipが動きました。

cmd = "sudo pip3 install pillow" runcmd = subprocess.call(cmd.split()) print (runcmd)

宜しくお願い致します

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

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

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

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

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

guest

回答2

0

ベストアンサー

exportの実行が無意味と言う事は理解できたと言う事でしょうか?

Python稼働中のプロセスの環境変数を変更するには、

Python

1os.environ["ZZZZZZ"]="123"

のようにします。

mogemoge.jsonは環境変数名として不正ですよ。ピリオドがあるので。
なんか、やりたい事を勘違いしているような気がしますが。

#追記

環境変数はGCP上でexport GOOGLE_APPLICATION_CREDENTIALS=hogehoge.json といった指定です。このコマンドを自動化できる設定方法を教えて下さい。

Python上でやるには、

Python

1os.environ["GOOGLE_APPLICATION_CREDENTIALS"]="hogehoge.json"

です。

投稿2019/04/09 06:18

編集2019/04/09 06:50
otn

総合スコア84533

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

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

koikogarey

2019/04/09 06:21

前述の方に丁寧に教えて頂いて実行が意味をなさない事がわかりました。
koikogarey

2019/04/09 06:22

環境変数名が不正であろうが、先方の環境がjsonでの認証を要求している以上こちらがピリオドを抜かせる事はできませんよね。まったく勘違いしていないと思うのですが。 os.environ ためしてみます
otn

2019/04/09 06:25 編集

勘違いしているひとは、みんな、勘違いしてないと思っています。 絶対に自分が間違っていると思って、もう一度考え直しましょう。
koikogarey

2019/04/09 06:28

普通の人は、勘違いしている内容と正しい記載を伝えるものです。 ピリオドがあるから不正とだけ言われても、だれも納得しませんよ。 例えばjsonの中身を変数としてnewkeyでいれる https://note.nkmk.me/python-os-environ-getenv/ こういうUrlもあるよ などあるとわかりやすいと思います。 説教だけならだれでもいえるんじゃないですかね?
koikogarey

2019/04/09 06:46

ありがとうございます。url調べてみます。json上でexportコマンドで認証は実際しているのですが、自動化にあたりどのように設定すべきか教えてください
koikogarey

2019/04/09 06:47

環境変数はGCP上でexport GOOGLE_APPLICATION_CREDENTIALS=hogehoge.json といった指定です。このコマンドを自動化できる設定方法を教えて下さい。
otn

2019/04/09 06:48

あなたがどういう勘違いをしているのかは、あなたが抱えている問題が不明なので、誰にも分かりませんよ。 > ピリオドがあるから不正とだけ言われても、だれも納得しませんよ。 環境変数に使える文字を自分で調べたら、納得できると思います。 というか、調べるまでもなく、シェル で、export mogemoge.json と打ってみたらどうでしょう?
otn

2019/04/09 06:49

追記しておきます。
koikogarey

2019/04/09 06:52

シェル で、export mogemoge.json と打ってみたらどうでしょう? スクリプトにするという事でしょうか?pyもあるのでpyからスクリプトは呼べますか?
koikogarey

2019/04/09 06:54

追記チェックしました。ありがとうございました。とても早く正確で参考になりました。あやうくスクリプトまでいくところでしたが、あなたのおかげでpy内で済みそうです。
koikogarey

2019/04/09 06:54

助かりました。ありがとうございました。大好き♡
otn

2019/04/09 06:58 編集

> スクリプトにするという事でしょうか?pyもあるのでpyからスクリプトは呼べますか? いや、違います。 シェルで打ってみれば、環境変数名にピリオドが使えない事が実感できると思ったから書いたのです。あくまで、「納得」についての話です。 そもそも、環境変数名が間違っていたようなので、今となっては関係ありませんが。 質問の根本的な部分に間違いがあると、今回みたいな無駄なやりとりが発生しますので、今後は十分注意してください。
koikogarey

2019/04/09 09:59

ありがとうございます。丁寧でとてもわかりやすい説明でした。
guest

0

export は bash などに組み込みで提供されているコマンドなので、そのような実行可能ファイルはパスにありません。一方で sudo は実行可能ファイルです。

公式リファレンスもよく読んで確認してください。

もう一点、環境変数について。
export ENV_KEY=value というコマンドで指定する環境変数はそのプロセスでのみ有効です。
したがって export ができたとしても、もとのPythonプロセスでは有効になりませんし、もちろんマシン全体のプロセスに影響を与えることもありません。
環境変数を追加することで具体的に何がしたかったかはわからないのですが、ご注意ください。

投稿2019/04/09 05:52

mather

総合スコア6753

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

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

koikogarey

2019/04/09 05:58

exportで環境変数を変更させるプログラムをpy上で書くにはどのような実行可能ファイルをインストールすればいいのですか?環境変数はjsonで認証させる為に設定します。
koikogarey

2019/04/09 05:58

何ができない という話はもう理解できたので、 どうすればできる という話が聞きたいです。
koikogarey

2019/04/09 06:16

例えばdeclare コマンドに -x オプションを付けて実行する方法もあるとか、exportならシェル変数とは違って環境変数が子プロセスに引き継がれるとかだと多くの読んでくれている方も嬉しいと思います。ま、ネガな考え方の相違ですね。
mather

2019/04/09 06:33

> 環境変数はjsonで認証させる為に設定します こちらの内容を詳細に書いてください。 「認証」とは具体的になんですか?サービスに通信するときの認証?あるいは他の可能性など。 「jsonで」というのはどういう意味ですか?全然文脈が伝わっていません。jsonファイルの内容はどんなものでしょうか。 export mogemoge.json なんていうコマンドで実際にPythonを使わずに認証ができていたりしますか? どうすればできる、ということを回答してほしいときはやりたいことを正確に包み隠さず書いてほしいですし、憶測で書かずにまずは具体的な成功事例である「認証が通る状態」を示してほしいです。
koikogarey

2019/04/09 06:48

環境変数はGCP上でexport GOOGLE_APPLICATION_CREDENTIALS=hogehoge.json といった指定です。
koikogarey

2019/04/09 06:49

憶測ではなくこのコマンドで認証が通ります。あと隠してるつもりはありませんし、そもそも正しい回答に不要なこういった議論はお互い迷惑なのでやめましょう。
mather

2019/04/09 08:23

質問に書かれているexportコマンドを間違えてるし、GCPへのリクエストってことが書かれていないし、GCPの何のサービスでなにがしたいのかも具体的には書かれてないですよね。 そういう情報の間違い、説明不足が不毛なやり取りを生んでいると思うので(今回のも解決しているとは思えませんが)次回以降お気をつけください。
koikogarey

2019/04/09 10:00

そうですね。私はアホなのでわかりやすい説明でぜひ今後ともよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問