标签: setuptools

PyCharm无法识别在开发模式下安装的模块

我在PyCharm 3.4.1专业版中有两个纯python项目.第一个,我们称之为p(像包),结构为setuptools包(即使用setup.py,所有要求等,但它不会上传到pypi或任何其他在线存储库).第二个,我们称之为s(如脚本),只是一个python脚本和两个模块.

Project s(在PyCharm中)被配置为使用专用的virtualenv,让我们称之为venv.

我遇到的问题如下:当我像这样安装项目(包)pvenv:

$ source /path/to/venv/bin/activate
(venv)$ cd /path/to/p
(venv)$ python3 setup.py develop
Run Code Online (Sandbox Code Playgroud)

在项目中的PyCharm中s,import p语句是错误的,消息没有名为p的模块.但是,当我运行脚本时s,一切都很好,唯一的问题是PyCharm IDE抱怨无法找到模块.我可以忍受这个,但它很烦人......

为什么会这样?它是PyCharm的东西还是包装相关的东西?见下面的新闻.


项目/包p具有以下结构:

p/
|
+- p/
|  |
|  +- __init__.py
|  +- other subpackages, modules, etc.
+- setup.py
+- README, DESCRIPTION, setup.cfg, etc.
Run Code Online (Sandbox Code Playgroud)

当我将PyCharm项目配置为p自己的virtualenv并在开发模式下安装时,一切正常.


新闻

PyCharm 5.0.4中仍然存在此问题.但是,我成功地解决了它.

出于某些原因,我不得不从pypi安装另一个包.我通过PyCharm进入文件 - >设置 - >项目: - >项目解释器,点击绿色+ …

python setuptools pycharm python-3.x

32
推荐指数
4
解决办法
3万
查看次数

在setup.py中执行python版本

目前,我们正在设置\在系统上安装一些软件包,方法是在install_requires属性下的setup.py中提及它们的版本和依赖项.我们的系统需要python 2.7.有时,用户有多个版本的python说2.6.x和2.7,它说的一些软件包已经可用但实际上在2.6网站软件包列表下可用的系统上.还有一些用户只有2.6,如何从setup.py强制执行,或者还有其他任何方式可以说只有python 2.7和我们想要setup.py更新的所有包只有2.7.我们在机器上要求至少2.7来运行我们的代码.

谢谢!Santhosh

python setuptools python-2.7

31
推荐指数
2
解决办法
2万
查看次数

如何在setup.py中引导numpy安装

我有一个C扩展项目需要numpy.理想情况下,我希望下载我的项目的人能够运行python setup.py install或使用一个电话pip.我setup.py遇到的问题是,我需要导入numpy来获取头文件的位置,但我希望numpy只是一个常规要求,install_requires以便从Python包索引中自动下载.

以下是我正在尝试做的一个示例:

from setuptools import setup, Extension
import numpy as np

ext_modules = [Extension('vme', ['vme.c'], extra_link_args=['-lvme'],
                         include_dirs=[np.get_include()])]

setup(name='vme',
      version='0.1',
      description='Module for communicating over VME with CAEN digitizers.',
      ext_modules=ext_modules,
      install_requires=['numpy','pyzmq', 'Sphinx'])
Run Code Online (Sandbox Code Playgroud)

显然,import numpy在安装之前我不能处于顶端.我已经看到一个setup_requires参数传递给setup()但是找不到任何关于它的用途的文档.

这可能吗?

python bootstrapping numpy setuptools

31
推荐指数
3
解决办法
7051
查看次数

有“setup.cfg”的完整文档吗?

Python打包教程建议“应首选静态元数据 (setup.cfg)。动态元数据 (setup.py) 仅应在绝对必要时用作逃生舱口。setup.py 曾经是必需的,但可以通过省略新版本的 setuptools 和 pip。”

打包和分发项目指南解释说“setup.cfg 是一个 ini 文件,其中包含 setup.py 命令的默认选项。有关示例,请参阅 PyPA 示例项目中的 setup.cfg。”

这个例子完全没用,而且似乎没有很多其他有用的信息。本教程中的示例表明,可以setuptools.setup()在 中列出一些或可能全部有效参数setup.cfg,但对此效果没有真正的解释。特别是,不清楚如何将列表参数(例如非常常见且重要的install_requires参数)转换为setup.cfg.

正如我通过推论和实验确定的,正确的方法如下:

[options]
install_requires =
    dependency_1
    dependency_2
Run Code Online (Sandbox Code Playgroud)

显然,最好将其正确记录在某处,以便新的包创建者不必仅仅为了指定其项目的依赖项而经历类似的过程。

存在这样的文档吗?

python packaging setuptools setup.py

31
推荐指数
1
解决办法
1万
查看次数

如何强制`setup.py test`在我的`virtualenv`中安装依赖项?

在讨伐令我的应用程序pip-installable,我打大打架setuptoolsdistribute.我假设我的依赖项是正确的,即安装pip install myapp可能应该正确填充虚拟环境.但是,我想在我开始的时候简化开发,所以我的目标是从一个空的virtualenvmake开始setup.py test(后来setup.py develop,但这是一个完全不同的斗争)用所有定义的依赖项填充它.

现在我的问题是:无论我怎么努力,我得到的都是依赖项安装.egg在我的项目目录中,这至少是次优的.我尝试创建一个setuptools可以使用的新命令pip(虽然看起来很笨拙但看起来很有用),但这不能成为解决方案(子类化和重写).

那么如何setup.py test填充virtualevn而不是我的工作目录呢?

python setuptools virtualenv distribute

30
推荐指数
1
解决办法
1万
查看次数

有没有一种简单的方法将 setup.py 转换为 pyproject.toml

我们有多个 python 项目,正在考虑将它们转换为使用pyproject.toml而不是setup.py.

有没有一种简单的方法可以自动执行此操作?

setuptools setup.py python-packaging pyproject.toml

30
推荐指数
2
解决办法
1万
查看次数

使用distutils/setuptools在安装后执行Python脚本

我正在尝试向Python distutils添加安装后任务,如如何使用简单的安装后脚本扩展distutils中所述?.该任务应该在已安装的lib目录中执行Python脚本.此脚本生成安装包所需的其他Python模块.

我的第一次尝试如下:

from distutils.core import setup
from distutils.command.install import install

class post_install(install):
    def run(self):
        install.run(self)
        from subprocess import call
        call(['python', 'scriptname.py'],
             cwd=self.install_lib + 'packagename')

setup(
 ...
 cmdclass={'install': post_install},
)
Run Code Online (Sandbox Code Playgroud)

这种方法有效,但据我所知,有两个不足之处:

  1. 如果用户使用的Python解释器不是拾取者PATH,则安装后脚本将使用不同的解释器执行,这可能会导致问题.
  2. 它对于干运行等是不安全的,我可以通过将其包装在一个函数中并使用它来解决它distutils.cmd.Command.execute.

我怎样才能改进我的解决方案?这样做有推荐的方法/最佳做法吗?如果可能的话,我想避免引入另一个依赖.

python install distutils setuptools post-install

29
推荐指数
1
解决办法
1万
查看次数

使用setup.py导入已安装软件包的错误

我在使用setup.py设置python包时遇到问题.首先,我有以下目录设置:

maindir
   |- setup.py
   |-mymodule
         |- __init__.py
         |- mainmodule.py
         |-subdir
             |- __init__.py
             |- submodule.py
Run Code Online (Sandbox Code Playgroud)

即项目目录包含setup.py和一个目录mymodule,该目录本身包含两个目录中的两个python模块.该文件submodule.py只包含

teststring = "hello world"
Run Code Online (Sandbox Code Playgroud)

mainmodule.py 包含:

from .subdir import submodule
mainstring = "42"
Run Code Online (Sandbox Code Playgroud)

setup.py包含:

import os
from setuptools import setup
setup(
    name = "mytestmodule",
    version = "0.0.1",
    description = ("A simple module."),
    packages=['mymodule'],
)
Run Code Online (Sandbox Code Playgroud)

当我from mymodule import mainmoduleipython从内部sourceTest行为按预期工作,我可以引用例如,mainmodule.submodule.teststring这使我的字符串hello world.

另一方面,当我使用这个'package' python setup.py install并尝试做同样的事情(从其他目录中)时,我收到一个导入错误:

In …
Run Code Online (Sandbox Code Playgroud)

python import setuptools python-2.7

27
推荐指数
2
解决办法
2万
查看次数

setup.py中的extras_require()和install_requires()之间的区别?

我试图理解setup.py 之间extras_require()和之间的区别,install_requires()但无法得到它.两者都用于安装Python依赖项,但它们之间的区别是什么?

python setuptools setup.py

27
推荐指数
3
解决办法
1万
查看次数

Python3中的Python命名空间包

命名空间包的主题似乎对于初学者来说有点混乱,并且它的先前版本的Python以几种不同的方式实现它或者StackOverflow上的许多问答都是过时的并没有帮助.我正在寻找Python 3.5或以后的解决方案.

场景:

我正在将一堆Python代码重构为模块和子模块,并且努力使这些项目中的每一个都设置为在坐在同一名称空间中时彼此独立地运行.

我们最终将使用内部PyPi服务器,将这些软件包提供给我们的内部网络,并且不希望将它们与外部(公共)PyPi软件包混淆.

示例: 我有2个模块,我希望能够执行以下操作:

from org.client.client1 import mod1
from org.common import config
Run Code Online (Sandbox Code Playgroud)

反映的模块将分开:

存储库1:

org_client_client1_mod1/
  setup.py
  mod1/
    __init__.py
    somefile.py
Run Code Online (Sandbox Code Playgroud)

存储库2:

org_common_config/
  setup.py
  config/
    __init__.py
    someotherfile.py
Run Code Online (Sandbox Code Playgroud)

我的Git仓库已经设置为org_client_client1_mod1org_common_config,所以我只需要在包装和执行安装__init__.py文件,我相信.

问题:

#1

随着__init__.py,我应该使用哪些(如果有的话)?:

from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
Run Code Online (Sandbox Code Playgroud)

要么:

import pkg_resources
pkg_resources.declare_namespace(__name__)
Run Code Online (Sandbox Code Playgroud)

#2

setup.py,我还需要添加namespace_modules参数,如果是,我会使用namespace_modules=['org.common'],还是namespace_modules=['org', 'common']

#3

我可以通过以某种方式实现这一点而放弃以上所有内容吗?也许是更简单或更"pythonic"的东西?

python setuptools pypi python-3.x namespace-package

26
推荐指数
2
解决办法
1787
查看次数