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

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

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

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

pip

pipとは、Pythonを用いて書かれているパッケージソフトのインストールや管理を行うためのパッケージマネジメントシステムです。pipを使う主なメリットは、コマンドラインインターフェースにて容易にPythonパッケージソフトをインストール可能だという点です。

Q&A

解決済

1回答

1448閲覧

pip/setuptoolsでモジュールのインストール先を取得したい

Yo-Ko.Fujiwara

総合スコア2

Python

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

pip

pipとは、Pythonを用いて書かれているパッケージソフトのインストールや管理を行うためのパッケージマネジメントシステムです。pipを使う主なメリットは、コマンドラインインターフェースにて容易にPythonパッケージソフトをインストール可能だという点です。

0グッド

0クリップ

投稿2020/06/14 15:33

Pythonで記述したスクリプトをPIPでインストールして使用する為パッケージを作っています。

目的

pipコマンドでインストールしたpythonスクリプトのパーミッションに実行権限を与えたい。

記述したsetup.pyは以下の通りです。

Python

1import setuptools 2from setuptools import setup, find_packages 3 4from setuptools.command.develop import develop 5from setuptools.command.install import install 6 7 8class PostInstallProcess(install): 9 def run(self): 10 # ここに処理パーミッション変更処理を記述する 11 # このスクリプト内でインストール先を取得してchmodコマンドを実行したい。 12 install.run(self) 13 14 15setuptools.setup( 16 name="packagename", 17 version="0.0.0.0", 18 packages=find_packages(), 19 cmdclass={ 20 'install': PostInstallProcess, 21 } 22)

クラス【PostInstallProcess】にインストール後に行いたい処理としてパーミッション変更コマンドを記述すれば目的は達成出来そうですがインストール先のパスを取得する方法がわかりません。
どなたかご存じの方おられましたらご示唆頂けますでしょうか?

よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

おそらく解決方法は他にもあると思いますが、一つの例を示します。
setup()の引数にscriptsentry_pointsを追加して下さい。

以下setup.pyの例です。この例ではhello_world.pyに定義された関数main()を呼び出してhelloというコマンドを作成します。

python

1from setuptools import setup, find_packages 2 3setup( 4 name="HelloWorld", 5 version="0.1", 6 packages=find_packages(), 7 scripts=["hello_world.py"], 8 entry_points={ 9 'console_scripts': [ 10 'hello=hello_world:main', 11 ], 12 }, 13) 14

hello_world.pyは下記のようになっています。

python

1def main(): 2 print("Hello, World")

またインストール後のhelloというコマンドは自動的に作成されており、その内容は下記になります。

python

1# -*- coding: utf-8 -*- 2import re 3import sys 4from hello_world import main 5if __name__ == '__main__': 6 sys.argv[0] = re.sub(r'(-script.pyw|.exe)?$', '', sys.argv[0]) 7 sys.exit(main())

投稿2020/06/14 16:28

yymmt

総合スコア1615

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

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

Yo-Ko.Fujiwara

2020/06/14 18:38

早速の回答ありがとうございます。 ご教授頂きましたsetup.pyを実行後Helloと入れる事でコンソールに出力を確認する事が出来ました。 ありがとうございます。 因みにこの場合は一つのsetup.pyで一つのエントリーポイントしか紐づけ出来ないものなのでしょうか? 例えばHelloの時はhello_world.py、goodbyeの時はgoodbye_world.pyが実行されると言うものです。
Yo-Ko.Fujiwara

2020/06/14 18: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', ], }, )
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問