pip/setuptoolsでモジュールのインストール先を取得したい
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 287
Pythonで記述したスクリプトをPIPでインストールして使用する為パッケージを作っています。
目的
pipコマンドでインストールしたpythonスクリプトのパーミッションに実行権限を与えたい。
記述したsetup.pyは以下の通りです。
import setuptools
from setuptools import setup, find_packages
from setuptools.command.develop import develop
from setuptools.command.install import install
class PostInstallProcess(install):
def run(self):
# ここに処理パーミッション変更処理を記述する
# このスクリプト内でインストール先を取得してchmodコマンドを実行したい。
install.run(self)
setuptools.setup(
name="packagename",
version="0.0.0.0",
packages=find_packages(),
cmdclass={
'install': PostInstallProcess,
}
)
クラス【PostInstallProcess】にインストール後に行いたい処理としてパーミッション変更コマンドを記述すれば目的は達成出来そうですがインストール先のパスを取得する方法がわかりません。
どなたかご存じの方おられましたらご示唆頂けますでしょうか?
よろしくお願いします。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
おそらく解決方法は他にもあると思いますが、一つの例を示します。
setup()の引数にscripts
とentry_points
を追加して下さい。
以下setup.py
の例です。この例ではhello_world.py
に定義された関数main()
を呼び出してhello
というコマンドを作成します。
from setuptools import setup, find_packages
setup(
name="HelloWorld",
version="0.1",
packages=find_packages(),
scripts=["hello_world.py"],
entry_points={
'console_scripts': [
'hello=hello_world:main',
],
},
)
hello_world.py
は下記のようになっています。
def main():
print("Hello, World")
またインストール後のhello
というコマンドは自動的に作成されており、その内容は下記になります。
# -*- coding: utf-8 -*-
import re
import sys
from hello_world import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.21%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2020/06/15 03:38
ご教授頂きましたsetup.pyを実行後Helloと入れる事でコンソールに出力を確認する事が出来ました。
ありがとうございます。
因みにこの場合は一つのsetup.pyで一つのエントリーポイントしか紐づけ出来ないものなのでしょうか?
例えばHelloの時はhello_world.py、goodbyeの時はgoodbye_world.pyが実行されると言うものです。
2020/06/15 03:47
ありがとうございます。
setup(
name="greeting",
version="0.1",
packages=find_packages(),
scripts=["hello_world.py", "bye_world.py"],
entry_points={
'console_scripts': ['hello=hello_world:main', 'bye=bye_world:main', ],
},
)