Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.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 在distutils中重命名脚本文件_Python_Distutils - Fatal编程技术网

Python 在distutils中重命名脚本文件

Python 在distutils中重命名脚本文件,python,distutils,Python,Distutils,我有一个python脚本myscript.py,我希望使用distutils安装它: from distutils.core import setup setup(..., scripts=['myscript.py'], ...) 我更愿意只使用myscript而不是键入myscript.py来调用已安装的脚本。这可以通过将文件重命名为仅仅myscript来实现,但是许多编辑器等将不再理解它是Python文件 是否有某种方法可以保留旧名称,myscript.py,但仍将文件安装为myscri

我有一个python脚本myscript.py,我希望使用distutils安装它:

from distutils.core import setup
setup(..., scripts=['myscript.py'], ...)
我更愿意只使用
myscript
而不是键入
myscript.py
来调用已安装的脚本。这可以通过将文件重命名为仅仅
myscript
来实现,但是许多编辑器等将不再理解它是Python文件


是否有某种方法可以保留旧名称,
myscript.py
,但仍将文件安装为
myscript

您始终可以执行类似操作(在
setup.py
中):


您可能希望查看自动为您执行此操作的setuptools;从…起 :

打包和安装脚本可能会有点麻烦 distutils。首先,要有一个脚本是不容易的 文件名匹配Windows和POSIX平台上的本地约定。 另一方面,您通常需要为文件创建一个单独的文件 “main”脚本,当实际的“main”是模块中的函数时 某处。即使在Python2.4中,使用-m选项也只适用于 包中未安装的实际.py文件

setuptools通过自动生成 使用正确的扩展名为您编写脚本,在Windows上它将 甚至创建一个.exe文件,这样用户就不必更改其 路径文本设置。使用此功能的方法是定义“条目” 设置脚本中的“点”,指示生成的函数 脚本应该导入并运行。例如,创建两个控制台 您可以使用名为foo和bar的脚本以及名为baz的GUI脚本 大概是这样的:


这是迄今为止我找到的最干净的解决方案。MFrecks answer在创建源发行版或执行除安装以外的命令时会导致问题

import distutils.command.install_scripts
import shutil

class my_install(distutils.command.install_scripts.install_scripts):
    def run(self):
        distutils.command.install_scripts.install_scripts.run(self)
        for script in self.get_outputs():
            if script.endswith(".py"):
                shutil.move(script, script[:-3])

setup(..., cmdclass = {"install_scripts": my_install}, ...)

创建一个符号链接怎么样?
myscript->myscript.py
?虽然这对
bdist
非常有效,但它会与
bdist\u rpm
中断。根据消息判断,它正在创建
INSTALLED\u文件
,查找旧名称下的文件,并排除错误。使用
build
子目录可能更好,即
build/\u scripts/myscript
setup(
    # other arguments here...
    entry_points={
        'console_scripts': [
            'foo = my_package.some_module:main_func',
            'bar = other_module:some_func',
        ],
        'gui_scripts': [
            'baz = my_package_gui:start_func',
        ]
    }
)
import distutils.command.install_scripts
import shutil

class my_install(distutils.command.install_scripts.install_scripts):
    def run(self):
        distutils.command.install_scripts.install_scripts.run(self)
        for script in self.get_outputs():
            if script.endswith(".py"):
                shutil.move(script, script[:-3])

setup(..., cmdclass = {"install_scripts": my_install}, ...)