我正在使用 setuptools 打包一个 python 应用程序,通常会运行python setup.py install
它会将所有内容打包到一个 Egg 中并安装它。
问题是我希望它安装为可编辑的,这样我就可以进入站点包并对应用程序源代码进行更改。我还没找到怎么做。
在我以前的工作环境中,运行python setup.py install
会将源文件夹复制到站点包中,但这次没有这样做。
我正在尝试安装我使用setuptools的develop命令开发的python包。
[旁注:网络上有大量关于此的信息(distutils、distutils2、setuptools、distribute)。据我所知,setuptools和develop是使用正在开发的代码的最现代/最佳实践方法。也许我错了。]
这就是我所做的:
(1) 我在包含 Python 代码的目录中放置了一个空的 __init__.py。
(2)我做了一个setup.py:
from setuptools import setup, find_packages
setup(name = "STEM_pytools",
version = "0.1",
packages = find_packages(),
author = "Timothy W. Hilton",
author_email = "my@email.address",
description = "visualization and data pre-/post-processing tools for STEM",
license = "",
keywords = "STEM",
url = "")
Run Code Online (Sandbox Code Playgroud)
(3)我跑了
python setup.py develop
Run Code Online (Sandbox Code Playgroud)
这似乎进展顺利。
但是,当我尝试使用该包时,我得到:
>>> import STEM_pytools
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named STEM_pytools
Run Code Online (Sandbox Code Playgroud)
安装命令也会发生同样的情况:它的输出看起来不错,然后是“没有名为 STEM_pytools 的模块”。我正在撕扯我的头发。任何建议表示赞赏!
foo
我有一个用深奥的编程语言编写的命令行程序( )。我想将此程序作为使用 setuptools 的现有 python 包的一部分进行分发。 foo
应该出现在用户的路径中并且可以从命令行执行,就像 distutil 的脚本或 setuptools 的entry_points的行为一样。
对我来说,为每个平台交叉编译程序,然后使用特定于平台的二进制文件为每个平台构建不同的 Egg 是可行的foo
。问题是,我不知道如何说服安装工具将二进制文件复制到目标系统上适合平台的位置。
例如,我尝试使用scripts
指令:
setup(
...
scripts=["foo"]
...
)
Run Code Online (Sandbox Code Playgroud)
但似乎 setuptools 不喜欢带有非 utf8 数据的“脚本”。
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcf in position 0: invalid continuation byte
Run Code Online (Sandbox Code Playgroud)
我可以将其声明为资源,但这不会将其放入用户的路径中。
如何将二进制命令行实用程序作为 python 包的一部分发送?
我正在开始我的第一个实际的 python 项目。我按照“Learn Python the Hard Way”制作了一个初始的Python框架,并且我也在使用virtualenv。
现在我想用git来做版本控制。根据 SO 中之前的一些问题,不建议我提交任何 virtualenv 文件。相反,我可以使用pip freeze > requirements.txt
, 和 use.gitignore
来忽略 virtualenv 目录。
但是,virtualenv 和 Python 项目框架都需要一个/bin
目录,我也应该提交它吗?(其实我不太清楚这个/bin
在Python项目中扮演什么角色)
如有任何建议,我们将不胜感激,如果我建立Python项目的过程有问题,请纠正我。
我有以下项目结构:
\n\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 docs\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 examples\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 MANIFEST.in\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.rst\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 setup.cfg\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 setup.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 myproject\n
Run Code Online (Sandbox Code Playgroud)\n\n我想将我的项目捆绑到一个轮子中。为此,我使用以下内容setup.py
:
#!/usr/bin/env python\n\nfrom setuptools import setup, find_packages\n\nsetup(name=\'myproject\',\n version=\'1.0\',\n description=\'Great project\'\n long_description=open(\'README.rst\').read(),\n author=\'Myself\'\n packages=find_packages(exclude=[\'tests\',\'test\',\'examples\'])\n )\n
Run Code Online (Sandbox Code Playgroud)\n\n运行时python setup.py bdist_wheel
,该examples
目录包含在轮子中。我该如何防止这种情况?
根据
\n\n\n\n我希望这examples
被排除在外。
我的 VCS 中有一个托管包。我跑:
$ pip install -vvv git+https://myvcs.com/myprotos
Run Code Online (Sandbox Code Playgroud)
这是日志。您会注意到它在安装过程中运行一个自定义脚本,该脚本实际上在项目中构建源文件。有关它正在做什么的详细信息,请参阅此问题。
Collecting git+https://myvcs.com/myprotos
Cloning https://myvcs.com/myprotos to /private/var/folders/3t/4qwkfyr903d0b7db7by2kj6r0000gn/T/pip-cFzP3I-build
Running command git clone -q https://myvcs.com/myprotos /private/var/folders/3t/4qwkfyr903d0b7db7by2kj6r0000gn/T/pip-cFzP3I-build
Running setup.py (path:/private/var/folders/3t/4qwkfyr903d0b7db7by2kj6r0000gn/T/pip-cFzP3I-build/setup.py) egg_info for package from git+https://myvcs.com/myprotos
Running command python setup.py egg_info
running egg_info
creating pip-egg-info/myprotos.egg-info
writing pip-egg-info/myprotos.egg-info/PKG-INFO
writing top-level names to pip-egg-info/myprotos.egg-info/top_level.txt
writing dependency_links to pip-egg-info/myprotos.egg-info/dependency_links.txt
writing manifest file 'pip-egg-info/myprotos.egg-info/SOURCES.txt'
reading manifest file 'pip-egg-info/myprotos.egg-info/SOURCES.txt'
writing manifest file 'pip-egg-info/myprotos.egg-info/SOURCES.txt'
Source in /private/var/folders/3t/4qwkfyr903d0b7db7by2kj6r0000gn/T/pip-cFzP3I-build has version 0.0.1, which satisfies requirement myprotos==0.0.1 from git+https://myvcs.com/myprotos
Installing collected packages: myprotos …
Run Code Online (Sandbox Code Playgroud) 假设我有一个名为 的文件夹,其中plugins
包含许多插件。n
每个插件都有自己的requirements.txt 文件,并且顶层有一个基本的requirements.txt 文件。
+requirements.txt
|
+Plugins+
+-----+ Plugin1/
|
+-----+ plugin2/
|
+-----+ Plugin3/
|
+-----+ Plugin4/+
| |
+-----+ +---+ requirements.txt
|
+-----+
|
+-----+
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法,可以在部署过程中安装所有模块中的所有requirements.txt。
我尝试指定-r plugins/*/requirements.txt
,但没有成功;有没有一种优雅的方式来处理这个问题?
我们有一堆 C++ 文件,其中包含我们使用 Cython 包装到 Python 的类。我们使用 setuptools 来构建 Cython 扩展。这一切都很好,我们遵循这里的指南: http ://cython.readthedocs.io/en/latest/src/userguide/wrapping_CPlusPlus.html
我们基本上是在做这样的事情
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize(
"rect.pyx", # our Cython source
sources=["Rectangle.cpp"], # additional source file(s)
language="c++", # generate C++ code
))
Run Code Online (Sandbox Code Playgroud)
我们不喜欢这样,我们必须重新编译所有内容,即使rect.pyx
在本例中只有 Cython 部分发生变化。事实上我们从来不碰.cpp
文件,但.pyx
经常更改文件。
我们希望将.cpp
文件单独编译成静态或共享库,然后.pyx
独立构建文件,该文件链接到从文件生成的库.cpp
。make
使用或,所有这些都会很容易cmake
,但我们想要一个仅使用setuptools
. 模拟代码看起来像这样:
from distutils.core import setup
from Cython.Build import cythonize
class CppLibary:
# somehow get that to work …
Run Code Online (Sandbox Code Playgroud) 我将我的包捆绑为 sdist zip 文件,之后我可以使用 pip install 将我的包导入到任何地方,但我想在调用 pip install 后自动运行一些安装后命令。我无法使用 python setup.py install 因为它是一个 sdist 并且我正在使用 pip 来安装它。我确实有一个 PostInstall 类,但 pip install 包后没有任何运行。有没有办法在 pip 安装包后自动运行脚本。我尝试过使用 postinstall,但它不起作用,而且我也不知道如何在安装方法中使用脚本 atrib。
这是我的 setup.py 文件: Setup.py
我无法使用 python setup.py install 因为它是一个 sdist 并且我正在使用 pip 来安装它。我确实有一个 MyInstall 类,但 pip install 包后没有运行任何内容。
我有以下目录结构(对于 python 发行版来说是相当标准的):
/some_dir
/common
file1.dat
file2.dat
/src
pkg1/
__init__.py
stuff.py
setup.py
Run Code Online (Sandbox Code Playgroud)
我想要实现的是将两者打包pkg1
到common
同一个 python Egg 中。该setup.py
文件非常标准(自动发现包)并且pkg1
已正确包含,不幸的是我不能对common
. 我尝试了很多东西,例如,,package_data
等等,但似乎没有任何效果。我怎样才能实现这个目标?package_data_files
package_dir
我也不热衷于保留这种结构,但我确实需要将这些文件放入一个公共目录中,因为我必须生成包含它们的nodejs、python 和 java 库,因此将目录移动到common/
python 中不是一个选项。
setuptools ×10
python ×9
pip ×3
build ×1
c++ ×1
cython ×1
deployment ×1
distutils ×1
git ×1
package ×1
project ×1
python-3.x ×1
python-wheel ×1
sdist ×1
setup.py ×1
virtualenv ×1