Pip无法安装依赖项

时间:2017-12-08 11:56:19

标签: python pip

我有一个开源项目(GridCal),我告诉用户使用pip install GridCalpip3 install GridCal为unix系统安装软件包。

安装文件是:

from distutils.core import setup
import sys
import os
import platform
from GridCal.grid.CalculationEngine import __GridCal_VERSION__

name = "GridCal"
version = str(__GridCal_VERSION__)
description = "Research Oriented electrical simulation software."

# Python 3.5 or later needed
if sys.version_info < (3, 5, 0, 'final', 0):
    raise (SystemExit, 'Python 3.5 or later is required!')

# Build a list of all project modules
packages = []
for dir_name, dir_names, file_names in os.walk(name):
        if '__init__.py' in file_names:
            packages.append(dir_name.replace('/', '.'))

package_dir = {name: name}

# Data_files (e.g. doc) needs (directory, files-in-this-directory) tuples
data_files = []
for dir_name, dir_names, file_names in os.walk('doc'):
        files_list = []
        for filename in file_names:
            fullname = os.path.join(dir_name, filename)
            files_list.append(fullname)
        data_files.append(('share/' + name + '/' + dir_name, files_list))

if platform.system() == 'Windows':
    # list the packages (On windows anaconda is assumed)
    required_packages = ["numpy",
                         "scipy",
                         "networkx",
                         "pandas",
                         "xlwt",
                         "xlrd",
                         # "PyQt5",
                         "matplotlib",
                         "qtconsole",
                         "pysot",
                         "openpyxl",
                         "pulp"
                         ]
else:
    # make the desktop entry
    make_linux_desktop_file(version_=version, comment=description)

    # list the packages
    required_packages = ["numpy",
                         "scipy",
                         "networkx",
                         "pandas",
                         "xlwt",
                         "xlrd",
                         "PyQt5",
                         "matplotlib",
                         "qtconsole",
                         "pysot",
                         "openpyxl",
                         "pulp"
                         ]

# Read the license
with open('LICENSE.txt', 'r') as f:
    license_text = f.read()

setup(
    # Application name:
    name=name,

    # Version number (initial):
    version=version,

    # Application author details:
    author="Santiago Peñate Vera",
    author_email="santiago.penate.vera@gmail.com",

    # Packages
    packages=packages,

    data_files=data_files,

    # Include additional files into the package
    include_package_data=True,

    # Details
    url="http://pypi.python.org/pypi/GridCal/",

    # License file
    license=license_text,

    # description
    description=description,

    # long_description=open("README.txt").read(),

    # Dependent packages (distributions)
    install_requires=required_packages,

    setup_requires=required_packages
)

我不时会收到用户报告说该程序缺少模块:https://github.com/SanPen/GridCal/issues/12

我已在install_requiressetup_requires中指定了包列表。

这是一个pip bug,还是我还要做其他的事情?

1 个答案:

答案 0 :(得分:0)

导入几乎所有依赖项的setup.py个导入GridCal.grid.CalculationEngine。即您的setup.py导入依赖关系之前安装它们。

尝试将其安装在与全局site-packages分离的新的空虚拟环境中 - 这肯定不起作用:

$ virtualenv --no-site-packages --python python3.4 test-gcal
Running virtualenv with interpreter /usr/bin/python3.4
Using base prefix '/usr'
New python executable in /home/phd/tmp/test-gcal/bin/python3.4
Also creating executable in /home/phd/tmp/test-gcal/bin/python
Installing setuptools, pip, wheel...done.

$ source test-gcal/bin/activate

$ pip install GridCal
Collecting GridCal
  Using cached GridCal-1.85.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-build-c7q9pbep/GridCal/setup.py", line 5, in <module>
        from GridCal.grid.CalculationEngine import __GridCal_VERSION__
      File "/tmp/pip-build-c7q9pbep/GridCal/GridCal/grid/CalculationEngine.py", line 18, in <module>
        from GridCal.grid.JacobianBased import IwamotoNR, Jacobian, LevenbergMarquardtPF
      File "/tmp/pip-build-c7q9pbep/GridCal/GridCal/grid/JacobianBased.py", line 19, in <module>
        from numpy import array, angle, exp, linalg, r_, Inf, conj, diag, asmatrix, asarray, zeros_like, zeros, complex128, \
    ImportError: No module named 'numpy'

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-c7q9pbep/GridCal/

此修复程序相对简单:您必须将__GridCal_VERSION__GridCal/Engine/CalculationEngine.py移至单独的GridCal/version.py(或__version__.py或类似内容)并执行{{1} } from GridCal.version import __GridCal_VERSION__

请记住,仅当您的setup.py为空或仅导入内置/标准模块时,导入才有效。如果所述GridCal/__init__.py直接或间接导入(尚未安装)依赖项__init__.py,则无法导入。有一种方法可以在version.py中解决这个问题,但我现在暂时忽略它。如果您需要解决方案 - 请再次询问。