определить исходный каталог в setup.py при установке с помощью pip - PullRequest
0 голосов
/ 24 сентября 2019

Есть ли способ найти исходный путь к исходному каталогу в файле setup.py при установке пакета из исходного каталога?Например, мой исходный код находится в

cd /home/jumbo/project/ ls -ltr Pipfile Pipfile.lock README.md bin src_code setup.py

Находясь в указанном выше каталоге, я запускаю 'pip3 install .' В setup.py я хочу записать путь к каталогу исходного кода git (/ home/ jumbo / project /) и запишите хеш коммита кода git в файл.

Путь к исходному файлу git не является постоянным, поскольку он изменяется для каждого пользователя, который устанавливает установку.

git -C /home/jumbo/project/ rev-parse HEAD > hash.txt

Спасибо за проверку.

Это мой код setup.py

import os.path
import subprocess
from setuptools import setup
from setuptools.command.install import install


class IW(install):
    def run(self):
        repo_path = os.path.dirname(os.path.realpath(__file__))
        print ("REPO_PATH:", repo_path)
        command = 'git -C ' + repo_path + ' rev-parse HEAD > hash.txt'
        execute_command = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
        execute_command.communicate()
        if execute_command.returncode != 0:
            raise OSError("Command %s failed" % command)
        install.run(self)

setup(name='jumbo_deploy',
      version='1.1.0',
      url='https://github.com/src/jumbo-deploy',
      license='Copyright Jumbo 2018',
      packages=['jumbo_deploy'],
      install_requires=[
          'argparse',
          'requests',
      ],
      zip_safe=False,
      package_data={'jumbo_deploy': ['hash.txt']},
      include_package_data=True,
      scripts=['bin/jumbo_deploy'],
      cmdclass={
          'install': IW,
      }
      )

+++++ END of my setup.py ++++


Currently with the above setup.py, my function run(self) is being executed after creating and changing the directory to some random 

user1 $ cd /home/jumbo/project/
user1 $ pip3 install . --upgrade -v
Created temporary directory: /private/var/folders/_w/sv2ms8pd0zl38l3lyy6f787w005lxf/T/pip-ephem-wheel-cache-w28h4dpd
Created temporary directory: /private/var/folders/_w/sv2ms8pd0zl38l3lyy6f787w005lxf/T/pip-req-tracker-pc07b4yn
Created requirements tracker '/private/var/folders/_w/sv2ms8pd0zl38l3lyy6f787w005lxf/T/pip-req-tracker-pc07b4yn'
Created temporary directory: /private/var/folders/_w/sv2ms8pd0zl38l3lyy6f787w005lxf/T/pip-install-wqohpdxt
Processing /home/jumbo/project
  Created temporary directory: /private/var/folders/_w/sv2ms8pd0zl38l3lyy6f787w005lxf/T/pip-req-build-1df74t7f
  Added file:////home/jumbo/project/ to build tracker '/private/var/folders/_w/sv2ms8pd0zl38l3lyy6f787w005lxf/T/pip-req-tracker-pc07b4yn'
  Running setup.py (path:/private/var/folders/_w/sv2ms8pd0zl38l3lyy6f787w005lxf/T/pip-req-build-1df74t7f/setup.py) egg_info for package from file:///home/jumbo/project/
    Running command python setup.py egg_info

REPO_PATH:/private/var/folders/_w/sv2ms8pd0zl38l3lyy6f787w005lxf/T/pip-req-build-1df74t7f 

========
I'm expecting REPO_PATH:/home/jumbo/project
but seems before my setup code runs, it already changed the directory to /private/var/folders/_w/sv2ms8pd0zl38l3lyy6f787w005lxf/T/pip-req-build-1df74t7f

1 Ответ

0 голосов
/ 27 сентября 2019

Я почти уверен, что вы не можете сделать это надежно с помощью пользовательской команды setuptools, и еще более маловероятно с помощью пользовательской команды install.На самом деле (как вы правильно заметили) у вас мало контроля над тем, где, когда эта команда действительно выполняется.

Возможно, вам стоит больше взглянуть на настройку команд sdist, build и develop.Обычно они запускаются непосредственно из исходного каталога.Вам нужно будет получить как минимум эти 3, а может и больше, чтобы попасть во все случаи, а этого может быть даже недостаточно.

Затем вы можете попробовать выполнить пользовательскую команду egg_info (если я правильно понял,более или менее все команды будут запускаться egg_info в какой-то момент), но я не особо разбираюсь в этом, и это может быть сложнее, чем кажется, чтобы все случаи были правильными.

Также посмотрите на setuptools документация по "Расширению и повторному использованию Setuptools" для получения дополнительных идей, как подключить ваш пользовательский код.

Наконец, вам может повезти с setuptools-scm и, в частности, его опция write_to, либо используя его напрямую, либо вдохновляясь на его код.

...