setuptoolsは、Python から到達可能な場所にパッケージをインストールします。つまり、インポートできます。
import project
絶対インポートではなく相対インポートを行うと、問題が発生します。main.py
インポートconfig.py
すると、同じディレクトリにあるため機能します。PATHmain.py
環境変数に存在する別の場所/usr/bin
または別の場所に移動すると、pythonはパッケージディレクトリからではなく、からインポートしようとします。解決策は絶対インポートを使用することです:config.py
sys.path
from project import config
今main.py
は「可動」です。
私が好む別の解決策は、 setuptoolsによって提供される自動スクリプト作成を使用することです。
コードを
if __name__ == "__main__":
# here all your beautiful code
ステートメントで、コードを関数に入れます (メインは適切な名前かもしれません):
def main():
# put your code here
if __name__ == "__main__": # not needed, just in case...
main()
今あなたを変更しますsetup.py
:
setup(
# ...
entry_points = {
"console_scripts": [
# modify script_name with the name you want use from shell
# $ script_name [params]
"script_name = project.main:main",
],
}
)
それで全部です。インストール後、setuptoolsは、シェルから呼び出すことができ、メイン関数を呼び出すラッパー スクリプトを作成します。プロジェクトディレクトリに置くことができるようmain.py
になり、ディレクトリに移動する必要がなくなりましたbin/
。setuptoolsは、このスクリプトをbin/
インストール プレフィックスに関連するディレクトリに自動的に配置することに注意してください。
エス。
python setup.py install --prefix ~/.local
プロジェクトパッケージをインストールします
~/.local/lib/python<version>/site-packages/<package_name>
そしてあなたのスクリプト
~/.local/bin/<script_name>
PATH~/.local/bin
環境に存在することを確認してください。
詳細: http://peak.telecommunity.com/DevCenter/setuptools#automatic-script-creation