Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python setup.py并将文件添加到/bin/_Python - Fatal编程技术网

Python setup.py并将文件添加到/bin/

Python setup.py并将文件添加到/bin/,python,Python,我不知道如何使setup.py向用户的/bin或/usr/bin或任何东西添加纸条 例如,我想在/usr/bin中添加一个myscript.py,这样用户就可以从任何目录调用myscript.py。Python文档在本节中对此进行了解释 脚本是包含Python源代码的文件,打算从命令行启动 如前所述,除了脚本之外,还有一种机制,更具跨平台性 使用entry\u points可以将命令行工具名与您选择的函数连接起来,而scripts可以指向任何文件(例如shell脚本)。如果您愿意构建和安装整个p

我不知道如何使
setup.py
向用户的
/bin
/usr/bin
或任何东西添加纸条


例如,我想在
/usr/bin
中添加一个
myscript.py
,这样用户就可以从任何目录调用
myscript.py

Python文档在本节中对此进行了解释

脚本是包含Python源代码的文件,打算从命令行启动

如前所述,除了脚本之外,还有一种机制,更具跨平台性


使用
entry\u points
可以将命令行工具名与您选择的函数连接起来,而
scripts
可以指向任何文件(例如shell脚本)。

如果您愿意构建和安装整个python包,我会这样做:

  • 编辑setup.py中的setup()函数以包含名为scripts的参数,并将其参数设置为希望从任何位置运行的文件的位置。e、 g
setup(name='myproject',author='',author\u email='',scripts=['bin/myscript.py'])

  • 在包含setup.py的目录中,通过键入
    mkdir-bin
  • 将myscript.py添加到这个新创建的
    bin
    目录中(并确保它是可执行的!)
  • cd
    再次放入包含setup.py的目录中,然后通过键入
    python setup.py install
  • 安装包后,您应该能够从系统上的任何位置运行myscript.py
      考虑使用
      控制台脚本

      from setuptools import setup
      setup(name='some-name',
            ...
            entry_points = {
                    'console_scripts': [
                        'command-name = package.module:main_func_name',                  
                    ],              
                },
      )
      
      其中,
      main\u func\u name
      是主模块中的主要函数。
      命令名是将其保存在/usr/local/bin/(通常)

      中的名称。要从setuptools和PyPI基础结构中获取有效的命令行工具,有两种方法:


    • 这允许命令行执行您想要的一切,它可以是Python脚本、shell脚本或完全不同的东西

    • 这允许Python函数(而不是脚本!)直接注册为命令行可访问工具

    • 这似乎将文件放入Python
      bin
      目录(在我的Mac上
      /opt/local/Library/Frameworks/Python.framework/Versions/3.1/bin/
      ),但我仍然无法运行它们。aharon,根据您安装3.1的方式,您可能必须更改
      路径,才能使bin目录中的脚本正常运行。请参阅前一个问题,以获取有关如何执行此操作的说明。这同样适用于非Python脚本的脚本。不幸的是,如果bin目录中也列出了普通数据文件,那么它也会将其视为可执行文件?顺便说一句,在bin目录中添加源代码的实践有些困难questionable@DataGreed如果要忽略.py扩展名…忽略它:),只要文件是可执行的,就可以忽略扩展名,您只需从命令行运行
      myscript
      。请原谅我的天真,但是为什么在bin目录中添加源代码是有问题的呢?这是一个非常奇怪的决定。Bin应该包含生成,而不是源。请重试。默认情况下,
      python setup.py install
      将我的_项目安装到
      /usr/local/bin
      中。要删除安装,请运行
      python setup.py install--record files.txt
      ,它会生成files.txt,然后通过
      rm
      删除这些路径。唉,第一种方法会将可能具有“.py”扩展名的脚本放入bin目录,并且(我认为)不会针对virtualenvs进行调整。U-G-L-Y。最好使用控制台_脚本。@Chris Cogdon,.py扩展名是不必要的,至少对于*nix系统是不必要的(我确实在文件顶部有一个shebang)。关于虚拟环境性能不佳的说法是对的——您必须转到环境的bin目录才能找到可执行文件。但是您可以从那里运行它。如果您运行的是
      pip3 install--editable.
      它将安装到命令
      /home/{username}/.local/bin
      。如果您运行
      sudopip3 install--editable.
      它会将命令安装到Mac上的
      /usr/local/bin/
      ,这也会安装到framework dir中(
      /Library/Frameworks/Python.framework/Versions/3.7/bin
      对于我),但不在
      /usr
      下(其中my
      pip
      Python
      from setuptools import setup
      setup(name='some-name',
            ...
            entry_points = {
                    'console_scripts': [
                        'command-name = package.module:main_func_name',                  
                    ],              
                },
      )