我有一个python脚本myscript.py,我希望使用distutils安装:
from distutils.core import setup
setup(..., scripts=['myscript.py'], ...)
Run Code Online (Sandbox Code Playgroud)
如果我可以使用myscript而不是键入来调用已安装的脚本,我更喜欢myscript.py.这可以通过将文件重命名为just来实现,myscript但许多编辑器等将不再理解它是Python文件.
有没有办法保留旧名称,myscript.py但仍然安装文件myscript?
cwe*_*ske 12
您可能希望查看为您自动执行此操作的setuptools; 来自 http://pythonhosted.org/setuptools/setuptools.html#automatic-script-creation:
使用distutils打包和安装脚本可能有点尴尬.首先,没有简单的方法让脚本的文件名与Windows和POSIX平台上的本地约定相匹配.另一方面,当你的实际"main"是某个模块中的一个函数时,你经常需要为"main"脚本创建一个单独的文件.即使在Python 2.4中,使用-m选项也只适用于未安装在软件包中的实际.py文件.
setuptools通过使用正确的扩展名为您自动生成脚本来修复所有这些问题,并且在Windows上它甚至可以创建.exe文件,以便用户不必更改其PATHEXT设置.使用此功能的方法是在设置脚本中定义"入口点",指示生成的脚本应导入和运行的功能.例如,要创建两个名为foo和bar的控制台脚本,以及一个名为baz的GUI脚本,您可以执行以下操作:
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',
]
}
)
Run Code Online (Sandbox Code Playgroud)
小智 10
你总是可以这样做(in setup.py):
import os
import shutil
if not os.path.exists('scripts'):
os.makedirs('scripts')
shutil.copyfile('myscript.py', 'scripts/myscript')
setup(...
scripts=['scripts/myscript'],
...
)
Run Code Online (Sandbox Code Playgroud)
这是迄今为止我发现的最干净的解决方案.在创建源分发或执行除安装之外的命令时,MFrecks应答会导致问题.
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}, ...)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3887 次 |
| 最近记录: |