主要参考

https://stackoverflow.com/questions/33014356/how-to-make-python-setup-py-install-install-source-instead-of-egg-file

说明

涉及到源码调试的东西多了,碰到安装成.egg的文件就不怎么好调试,我希望文件包安装完之后,所有的源文件都是解压后放在文件夹中的。

以这次更新gluoncv到最新安装包为例,比如,在这里把最新的gluoncv下载下来,

https:///dmlc/gluon-cv

解压后切换到目录下用python setup.py install命令进行安装(mx36gpu是我在anaconda下的mxnet环境)

(mx36gpu) D:\mXNet\gluon-cv-master>python setup.py install

最后发现在D:\Anaconda3\envs\mx36gpu\Lib\site-packages文件夹下出现的是一个gluoncv-0.8.0-py3.6.egg文件,而不是一个文件夹。这样我在源码调试时,看上去非常不美观。

根据setuptools官网上的说明(参考https://setuptools.readthedocs.io/en/latest/setuptools.html#setting-the-zip-safe-flag),要把zip_safe改成False才行

修改后的setup.py文件内容如下,

#!/usr/bin/env python
import io
import os
import re
import sys

import numpy as np

try:
from Cython.Build import cythonize
except ImportError:
cythonize = None
from setuptools import setup, find_packages, Extension

with_cython = False
if '--with-cython' in sys.argv:
if not cythonize:
print("Cython not found, please run `pip install Cython`")
exit(1)
with_cython = True
sys.argv.remove('--with-cython')


def read(*names, **kwargs):
with io.open(
os.path.join(os.path.dirname(__file__), *names),
encoding=kwargs.get("encoding", "utf8")
) as fp:
return fp.read()


def find_version(*file_paths):
version_file = read(*file_paths)
version_match = re.search(r"^__version__ = ['\"]([^'\"]*)['\"]",
version_file, re.M)
if version_match:
return version_match.group(1)
raise RuntimeError("Unable to find version string.")


try:
import pypandoc

long_description = pypandoc.convert('README.md', 'rst')
except(IOError, ImportError):
long_description = open('README.md').read()

VERSION = find_version('gluoncv', '__init__.py')

requirements = [
'numpy',
'tqdm',
'requests',
# 'mxnet',
'matplotlib',
'portalocker',
'Pillow',
'scipy',
]
if with_cython:
_NP_INCLUDE_DIRS = np.get_include()

# Extension modules
ext_modules = cythonize([
Extension(
name='gluoncv.nn.cython_bbox',
sources=['gluoncv/nn/cython_bbox.pyx'],
extra_compile_args=['-Wno-cpp', '-O3'],
include_dirs=[_NP_INCLUDE_DIRS]),
Extension(
name='gluoncv.model_zoo.rcnn.rpn.cython_rpn_target',
sources=['gluoncv/model_zoo/rcnn/rpn/cython_rpn_target.pyx'],
extra_compile_args=['-Wno-cpp', '-O3'],
include_dirs=[_NP_INCLUDE_DIRS]),
])
else:
ext_modules = []

setup(
# Metadata
name='gluoncv',
version=VERSION,
author='Gluon CV Toolkit Contributors',
url='https:///dmlc/gluon-cv',
description='MXNet Gluon CV Toolkit',
long_description=long_description,
license='Apache-2.0',

# Package info
packages=find_packages(exclude=('docs', 'tests', 'scripts')),
zip_safe=False,
include_package_data=True,
install_requires=requirements,
ext_modules=ext_modules
)

然后再执行

(mx36gpu) D:\mXNet\gluon-cv-master>python setup.py install

在anaconda的文件夹下,就可以找到gluoncv-0.8.0-py3.6.egg解压后的文件夹。