forked from openkylin/flit
89 lines
3.0 KiB
Python
89 lines
3.0 KiB
Python
|
#!/usr/bin/env python3
|
||
|
|
||
|
# Symlink install flit & flit_core for development.
|
||
|
# Most projects can do the same with 'flit install --symlink'.
|
||
|
# But that doesn't work until Flit is installed, so we need some bootstrapping.
|
||
|
|
||
|
import argparse
|
||
|
import logging
|
||
|
import os
|
||
|
import os.path as osp
|
||
|
from pathlib import Path
|
||
|
import shutil
|
||
|
import sys
|
||
|
|
||
|
my_dir = Path(__file__).parent
|
||
|
os.chdir(str(my_dir))
|
||
|
sys.path.insert(0, 'flit_core')
|
||
|
|
||
|
from flit.install import Installer
|
||
|
|
||
|
logging.basicConfig(level=logging.INFO)
|
||
|
log = logging.getLogger(__name__)
|
||
|
|
||
|
class DebianInstaller(Installer):
|
||
|
def install_directly(self):
|
||
|
"""Install a module/package into package directory, and create its scripts.
|
||
|
"""
|
||
|
dirs = self._get_dirs(user=self.user)
|
||
|
dirs['purelib'] = 'debian/flit/' + dirs['stdlib'] + '/dist-packages'
|
||
|
dirs['scripts'] = 'debian/flit'+ dirs['scripts']
|
||
|
os.makedirs(dirs['purelib'], exist_ok=True)
|
||
|
os.makedirs(dirs['scripts'], exist_ok=True)
|
||
|
|
||
|
dst = osp.join(dirs['purelib'], osp.basename(self.module.path))
|
||
|
if osp.lexists(dst):
|
||
|
if osp.isdir(dst) and not osp.islink(dst):
|
||
|
shutil.rmtree(dst)
|
||
|
else:
|
||
|
os.unlink(dst)
|
||
|
|
||
|
# Install requirements to target environment
|
||
|
# self.install_requirements()
|
||
|
|
||
|
# Install requirements to this environment if we need them to
|
||
|
# get docstring & version number.
|
||
|
#if self.python != sys.executable:
|
||
|
# self.install_reqs_my_python_if_needed()
|
||
|
|
||
|
src = str(self.module.path)
|
||
|
if self.symlink:
|
||
|
log.info("Symlinking %s -> %s", src, dst)
|
||
|
os.symlink(osp.abspath(self.module.path), dst)
|
||
|
self.installed_files.append(dst)
|
||
|
elif self.pth:
|
||
|
# .pth points to the the folder containing the module (which is
|
||
|
# added to sys.path)
|
||
|
pth_target = osp.dirname(osp.abspath(self.module.path))
|
||
|
pth_file = pathlib.Path(dst).with_suffix('.pth')
|
||
|
log.info("Adding .pth file %s for %s", pth_file, pth_target)
|
||
|
with pth_file.open("w") as f:
|
||
|
f.write(pth_target)
|
||
|
self.installed_files.append(pth_file)
|
||
|
elif self.module.is_package:
|
||
|
log.info("Copying directory %s -> %s", src, dst)
|
||
|
shutil.copytree(src, dst)
|
||
|
self._record_installed_directory(dst)
|
||
|
else:
|
||
|
log.info("Copying file %s -> %s", src, dst)
|
||
|
shutil.copy2(src, dst)
|
||
|
self.installed_files.append(dst)
|
||
|
|
||
|
scripts = self.ini_info.entrypoints.get('console_scripts', {})
|
||
|
self.install_scripts(scripts, dirs['scripts'])
|
||
|
|
||
|
self.write_dist_info(dirs['purelib'])
|
||
|
|
||
|
install_kwargs = {'user': False, 'symlink': False}
|
||
|
# Install flit_core
|
||
|
DebianInstaller.from_ini_path(
|
||
|
my_dir / 'flit_core' / 'pyproject.toml', **install_kwargs
|
||
|
).install_directly()
|
||
|
print("Linked flit_core into site-packages.")
|
||
|
|
||
|
# Install flit
|
||
|
DebianInstaller.from_ini_path(
|
||
|
my_dir / 'pyproject.toml', **install_kwargs
|
||
|
).install_directly()
|
||
|
print("Linked flit into site-packages.")
|