如何使虚拟环境中的脚本的入口点在系统范围内可用?

2024-04-26 12:32:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用setuptools进行python打包,在这里我用设置.py文件:

设置.py

# -*- coding: utf-8 -*-

from setuptools import setup, find_packages

setup(...
      name='my_project',
      entry_points={'console_scripts':['my_entry_name=my_package.scripts.my_python_script:main'
                                      ]},
     ...
)

安装包后,我可以从批处理文件调用此入口点,如下所示:

我的\u当前\u批_file.command命令

#!/bin/bash
cd "$(dirname "$0")"  # set the working directory as the command file locations

~/anaconda3/envs/my_env_name/bin/entry_point_name <my script args>

虽然这样做可行,但虚拟环境的使用导致我在入口点调用之前包含所有路径信息,在我看来,这实际上破坏了入口点应该为脚本使用者提供的简单性。有没有办法让setuptools在系统范围内注册入口点,这样我就可以调用入口点而不需要这样的路径?地址:

我想要的批次_file.command命令

#!/bin/bash
cd "$(dirname "$0")"  # set the working directory as the command file locations

entry_point_name <my script args>

如果没有虚拟环境带来的这种复杂性,控制台脚本入口点允许脚本使用者使用脚本,而不必知道脚本安装在哪里,甚至不必知道它是用什么语言编写的。即使在虚拟环境中打包,我也希望保持这种简单性。你知道吗

我尝试过的- 安装包后,我在虚拟环境中找到了实际的入口点文件:

/anaconda3/envs/my_env/bin/my_entry_name

并将此文件的副本放置在主bin路径中:

/anaconda3/bin/my_entry_name

然后发现我可以根据需要调用没有路径的入口点,但是这是一个手动步骤,我不想让脚本使用者去做。有没有办法让setuptools将入口点文件放在常规bin路径中,而不是放在环境bin或其他一些自动方法中?你知道吗

我的设置

  • 操作系统:macOS Catalina
  • Shell:bash(是的,我在Catalina更新后将其改回来,并抑制了唠叨的“zsh is now default”消息)
  • IDE:PyCharm 19.1专业版
  • Anaconda:4.4.7(注:由Catalina update从root移动到User/my\u User/by)
  • Python:3.7版
  • 虚拟环境类型:conda

Tags: 文件thename路径脚本bashbinmy