Пакет Python 3 virtualenv pypi неправильно устанавливается при использовании setup.py - PullRequest
0 голосов
/ 18 июня 2019

люди - эта проблема мучает меня некоторое время и только в конкретной системе, которую я использую. Мой обходной путь состоял в том, чтобы установить пакеты python вне моей виртуальной среды python, но я хотел бы просто исправить проблему. Я неделями искал решение, и мне не повезло. Я использую код Visual Studio на Windows 10.

Требуется помощь

Я хотел бы исправить описанную ниже проблему и избежать описанного обходного пути, но не смог ее исправить. Любая помощь в решении этой проблемы будет принята с благодарностью.

Проблема

Когда я выполняю настройку виртуальной среды и устанавливаю pip:

PS D:\Code\my-pkg> python -m venv venv
PS D:\Code\my-pkg> .\venv\Scripts\activate
(venv) PS D:\Code\my-pkg>pip install -e ".[test]" --force 

Я должен иметь возможность запустить "publish.py" из моей командной строки:

(venv) PS D:\Code\my-pkg> publish

Однако, когда я пытаюсь запустить его, я получаю следующее:

Traceback (most recent call last):
  File "D:\Code\my-pkg\venv\Scripts\publish.py", line 4, in <module>
    __import__('pkg_resources').require('my-pkg==0.2.0.0')
  File "C:\Python37\lib\site-packages\pkg_resources\__init__.py", line 3088, in <module>
    @_call_aside
  File "C:\Python37\lib\site-packages\pkg_resources\__init__.py", line 3072, in _call_aside
    f(*args, **kwargs)
  File "C:\Python37\lib\site-packages\pkg_resources\__init__.py", line 3101, in _initialize_master_working_set
    working_set = WorkingSet._build_master()
  File "C:\Python37\lib\site-packages\pkg_resources\__init__.py", line 574, in _build_master
    ws.require(__requires__)
  File "C:\Python37\lib\site-packages\pkg_resources\__init__.py", line 892, in require
    needed = self.resolve(parse_requirements(requirements))
  File "C:\Python37\lib\site-packages\pkg_resources\__init__.py", line 778, in resolve
    raise DistributionNotFound(req, requirers)
pkg_resources.DistributionNotFound: The 'my-pkg==0.2.0.0' distribution was not found and is required by the application

Обходной путь

Чтобы обойти это, я должен вызвать скрипт напрямую:

(venv) PS D:\Code\my-pkg> .\src\Scripts\publish.py

Что приводит к

Traceback (most recent call last):
  File "D:\Code\my-pkg\src\Scripts\publish.py", line 5, in <module>
    import click
ModuleNotFoundError: No module named 'click'

Что я могу обойти, установив click на мою систему, вне виртуальной среды. Однако мне нужно сделать это для любых других зависимостей пакетов, которые у меня могут быть, что противоречит цели использования virtualenv.

setup.py

from setuptools import setup, find_packages
import os

build_num = os.environ.get('BUILD_NUMBER', '0')
version = "0.2.0.{}".format(build_num)

test_requirements = ['pytest', 'pylint', 'coverage', 'pytest-cov']

setup(
        name="my-pkg",
        version=version,
        packages=find_packages(),
        scripts=[
            'src/Scripts/publish.py'
        ],
        tests_require=test_requirements,
        install_requires=[
            'requests',
            'requests_negotiate_sspi',
            'wincertstore',
            'click'
            ],
        extras_require={
            'test':test_requirements
        }
     )

publish.py

import logging

import click

@click.group()
def tests():
    return 0

@tests.command()
@click.argument("endpoint")
@click.argument("results_path")
@click.option("--format", "-i", type=click.Choice("nunit", "junit"), required=True)
@click.option("--logging_level", "-l", type=click.Choice(logging.INFO, logging.DEBUG), default=logging.INFO, show_default=True)
def find(endpoint, results_path, format, logging_level):
    logging.basicConfig(level=logging_level)
    logging.info("Hello, friend")
...