标签: python-module

如何在Ubuntu上安装Python模块

我刚刚在Python上编写了一个函数.然后,我想在我的Ubuntu 11.04上创建模块并安装.这就是我做的.

  1. 创建setup.py以及function.py文件.

  2. 使用$ Python2.7 setup.py sdist构建分发文件

  3. 然后安装它$ Python2.7 setup.py install

一切都很好.但是,后来我想在我的代码中使用模块导入它.我收到导入错误:ImportError:没有名为'-------'的模块

PS.我搜索了谷歌并没有找到具体的答案.详细的答案将不胜感激.

python python-module

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

Python库从字节计算人类可读的文件大小?

我发现hurry.filesize非常有用,但它不提供十进制输出?

例如:

print size(4026, system=alternative) gives 3 KB.
Run Code Online (Sandbox Code Playgroud)

但是后来当我添加所有值时,我没有得到确切的总和.例如,如果输出为hurry.filesize4变量且每个值为3.如果我将它们全部添加,则输出为15.

我正在寻找hurry.filesize的替代方案来获得小数输出.

python python-module

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

是否有命名单模块Python包的规则?

我给Python包中单个模块的名称是否与包的名称相匹配?

例如,如果我有一个带有结构的单个模块的包

super-duper/
    super/
        __init.py___
        mycode.py
        ...
Run Code Online (Sandbox Code Playgroud)

我可以super-duper在PyPi上创建一个包,安装后会有两个site-packages名称不匹配的文件夹:

 super/
 super_duper-1.2.3.dist-info/
Run Code Online (Sandbox Code Playgroud)

这意味着要导入我使用的项目

import super
Run Code Online (Sandbox Code Playgroud)

而不是实际的包名(super_duper)

这似乎违反了常规做法(从我看到的每个其他包的文件夹判断site-packages)遵循该模式

 same_name/
 same_name-1.2.3.dist-info/
Run Code Online (Sandbox Code Playgroud)

用于PyPi包same-name.

我应该(总是)构建我的项目

super-duper/
    super_duper/
        __init.py___
        mycode.py
        ...
Run Code Online (Sandbox Code Playgroud)

确保包名称和模块导入名称"匹配":

import super_duper
Run Code Online (Sandbox Code Playgroud)

我应该遵循相关的最佳做法或规则吗?

python python-module package pypi

13
推荐指数
2
解决办法
2276
查看次数

在Python中以编程方式确定distutils数据文件的位置

我正在尝试将数据文件包含在我的包中的distutils中,然后使用相对路径引用它们(参见http://docs.python.org/distutils/setupscript.html#distutils-additional-files)

我的目标结构是:

myproject/
  mycode.py
  data/
    file1.dat
Run Code Online (Sandbox Code Playgroud)

代码mycode.py,实际上是包中的脚本.它依赖于访问data/file1.dat,使用相对路径引用它.在setup.py,我有:

setup(
 ...
 scripts = "myproject/mycode.py"
 data_files = [('data', 'myproject/data/file1.dat')]
)
Run Code Online (Sandbox Code Playgroud)

假设用户现在使用:

python setup.py --prefix=/home/user/
Run Code Online (Sandbox Code Playgroud)

然后mycode.py会出现在某些地方/home/user/bin/.但是data/file1.dat现在已经破坏了引用,因为脚本存在于数据的其他地方.

我怎样才能找到mycode.py绝对路径myproject/data/file1.dat,所以我可以根据用户安装包的位置正确引用它?

编辑
当我安装这个prefix=/home/user/,我得到data/file1.dat创造了/home/user/这正是我想要的,唯一缺少的部分是如何检索,只给出一个相对路径,不知道在用户安装的程序包的绝对路径该文件编程.当我尝试使用package_data而不是data_files,它不起作用 - 我只是不在data/file1.dat任何地方创建,即使我删除我的MANIFEST文件.

我已经阅读了目前关于这个看似非常普遍的问题的所有讨论.然而,所有提出的解决方案都没有处理我上面的情况,其中需要访问的代码data_files是脚本,其位置可能会根据--prefix参数而改变setup.py.我能想到的解决这个问题的唯一黑客是添加数据文件scripts=setup(),如:

setup(
  ...
  scripts = ["myproject/mycode.py", "myproject/data/file1.data"]
)
Run Code Online (Sandbox Code Playgroud)

这是一个可怕的黑客,但它是我能想到的唯一方法,以确保 …

python packaging distutils python-module setuptools

12
推荐指数
2
解决办法
5999
查看次数

为什么导入python模块不导入嵌套模块?

如果我这样做:

import lxml 
Run Code Online (Sandbox Code Playgroud)

在python中,lxml.html不导入.例如,我无法调用该lxml.html.parse()函数.为什么会这样?

python python-module

12
推荐指数
2
解决办法
4617
查看次数

Python:确定实际的当前模块(不是__main__)

我正在尝试确定函数的实际当前模块(如果从其他地方导入,则会看到),即使当前模块是" 顶级脚本环境 " __main__.

这可能听起来像一个奇怪的事情,但背景是我需要序列化一个函数并在不同的机器上反序列化它(包括参数),为此我需要确保__main__在反序列化之前导入正确的模块AND NOT (否则我得到一个错误说AttributeError: 'module' object has no attribute my_fun).

到目前为止,我已经尝试过检查:

import inspect
print inspect.getmodule(my_fun)
Run Code Online (Sandbox Code Playgroud)

这给了我

<module '__main__' from 'example.py'>
Run Code Online (Sandbox Code Playgroud)

当然.我也试过找一些有用的东西globals(),没有运气.

我真正想要的是<module 'example' from 'example.py'>.我想一个hacky方法是使用类似的东西从文件名解析它

m_name = __main__.__file__.split("/")[-1].replace(".pyc","")
Run Code Online (Sandbox Code Playgroud)

然后按名称查找模块sys.modules[m_name].

有更干净/更好的方法吗?

编辑:在了解了ipython的"FakeModule"以及更多谷歌搜索后,我发现了这篇文章,它正好描述了我面临的问题,包括我当前的解决方案(明确导入当前模块import current_module并序列化current_module.my_fun而不是my_fun).我试图避免这种情况,因为对我的软件包的用户来说可能不太直观.

python python-module inspection

12
推荐指数
3
解决办法
3023
查看次数

Python模块导入 - 显式与隐式相对导入

昨晚,我的Mac上工作时,我成立了一些在我的模块导入__init__.py

from MongoProvider import MongoProvider
from Settings import Settings
Run Code Online (Sandbox Code Playgroud)

我不确定那台机器上有什么版本的Python.一旦我拥有了该信息,我稍后将编辑该问题.

今天,在不同的机器上工作,这是Windows并使用Python 3.3.3,我的模块导入正在破坏.通过添加显式相对导入(添加前导点),我能够解决问题.

from .MongoProvider import MongoProvider
from .Settings import Settings
Run Code Online (Sandbox Code Playgroud)

我收到的痕迹是:

Traceback (most recent call last):
File "app.py", line 5, in <module> from modules.route_handlers import Route_Handlers
File "C:\Users\willb\bearded-dubstep\modules\route_handlers\Route_Handlers.py", line 9, in <module> from modules.backend_providers import Settings
File "C:\Users\willb\bearded-dubstep\modules\backend_providers\__init__.py", line 1, in <module> from MongoProvider import MongoProvider
ImportError: No module named 'MongoProvider'
Run Code Online (Sandbox Code Playgroud)

我的项目布局是

root
| _modules
  | _api_helpers
    | __init__.py
    | InvalidUsage.py
    | response_utils.py
  | _backend_providers
    | __init__.py
    | …

python python-module python-import

12
推荐指数
1
解决办法
4906
查看次数

缺少'libxml/xmlversion.h'的Pip安装错误

我需要安装python包xmlsec(https://pypi.python.org/pypi/xmlsec)并在我尝试运行时

pip install xmlsec
Run Code Online (Sandbox Code Playgroud)

它给了我这个错误:

src\xmlsec\constants.c(266) : fatal error C1083: Cannot open include file: 'libxml/xmlversion.h': No such file or directory
Run Code Online (Sandbox Code Playgroud)

当我第一次研究这个错误时,我发现它与安装的lxml包有很多答案.尝试后:

pip install --upgrade lxml
Run Code Online (Sandbox Code Playgroud)

它无法升级,因此我卸载了lxml并再次安装,但出现了IO错误.最后我从http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml下载了lxml文件并将其放在我的python目录中并安装它作为这个问题的答案:安装lxml,libxml2 ,Windows 8.1上的libxslt

它成功上传,当运行pip升级时,它表示它是最新的.

虽然缺少"libxml/xmlversion.h",但尝试安装xmlsec仍然存在同样的错误.有谁知道这里还有什么问题?

注意:我在Windows上使用python 2.7

python pip python-module python-2.7 python-packaging

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

为什么我在每个级别都需要__init__.py?

鉴于我有以下目录结构.作为当前工作目录

.
\---foo
    \---bar
        \---__init__.py
        \---baz.py
Run Code Online (Sandbox Code Playgroud)

当我跑步时,python -c "import foo.bar.baz"我得到了

Traceback (most recent call last):
  File "<string>", line 1
ImportError: No module named foo.bar.baz
Run Code Online (Sandbox Code Playgroud)

如果我echo "" > foo/__init__.py,上面的命令有效.

我做错了什么或者我是否误解了这一点__init__.py?我认为这是停止现有的模块,他们不应该,其中例如一个名为string,但如果更换foostring在我的例子中,我似乎不得不创建一个不应该被使用的模块,只是让我可以引用文件更深层次的.

更新

我正在使用一个构建系统,它正在__init__.py为我生成并正在执行目录结构,虽然我可以搞乱层次结构,但我更愿意添加__init__.py自己.要稍微改变一下这个问题,为什么我需要在每个级别而不是在顶部的python包?只是一个规则,你只能从python路径或python路径的一系列包中导入模块?

python python-module python-import

12
推荐指数
1
解决办法
8539
查看次数

没有名为 pipreqs.__main__ 的模块;'pipreqs' 是一个包,不能直接执行

我正在尝试使用 pipreqs 模块生成需求文本。但 pipreqs 正在生成以下错误。

No module named pipreqs.__main__; 'pipreqs' is a package and cannot be directly executed
Run Code Online (Sandbox Code Playgroud)

我正在使用 Visual Studio Code,并尝试通过在终端中执行以下命令来使用 pipreqs。

python -m pipreqs [location/project]
Run Code Online (Sandbox Code Playgroud)

我已经安装了 pipreqs 并更新了 pip。但问题仍然存在。这是一个错误还是我以错误的方式进行了操作?

python python-module requirements.txt visual-studio-code

12
推荐指数
1
解决办法
7734
查看次数