如何从本地文件系统安装(或分发)安装程序包

时间:2012-10-19 21:01:08

标签: python packaging setuptools distribute

是否可以在setup.py中指定(可编辑的)已知驻留在本地文件系统上的源依赖项?

考虑以下目录结构,所有目录结构都位于单个VCS存储库中:

projects
  utils
    setup.py
    ...
  app1
     setup.py
     ... # app1 files depend on ../utils
  app2
     setup.py
     ... # app2 files depend on ../utils

给出以下命令:

cd projects
mkvirtualenv app1
pip install -e app1

我想安装app1的所有依赖项,包括“utils”,这是一个“可编辑”的依赖项。同样,如果我为app2做了同样的事情。

我尝试使用file://...install_requiresdependency_links个网址的所有不同组合进行播放无效。我想使用像src+file://../utils这样的依赖链接URL,它会告诉setuptools包的源是在这个相对路径的文件系统上。有没有办法做到这一点?

3 个答案:

答案 0 :(得分:4)

我有一个相同的问题,我需要依赖兄弟文件夹中的模块。在遇到https://caremad.io/2013/07/setup-vs-requirement/

后,我找到了一个解决方案

我最终使用requirements.txt来专门引用我想要的文件,然后使用

安装所有内容
pip install -r requirements.txt

<强> requirements.txt

-e ../utils                                                                                                                                                                    
-e .

setup.py包含所有其他依赖项,包括utils。当pip尝试自己安装app1时,它会意识到utils依赖项已经被填充,因此在安装其他需求时会将其传递给它。

答案 1 :(得分:0)

当我想使用一组相互关联的项目时,我会使用/setup.py develop安装所有项目。

如果我错误地或稍后我想要一个pip安装的模块可编辑,我克隆源,并在其上做python setup.py develop,替换现有的。

为了确保,我删除了virtualenv网站包中的引用和包本身。

答案 2 :(得分:0)

我设法通过以下方式在setup.py中提供了相对本地依赖项:

# Uncomment the next line to define a global platform for your project
platform :ios, '11.0'
require_relative '../node_modules/react-native/scripts/react_native_pods'

target 'Example' do
  # Comment the next line if you don't want to use dynamic frameworks
  #use_frameworks!

  # Pods for Example


  # pod 'React', :path => '../node_modules/react-native'

  pod 'RNSound', :path => '../node_modules/react-native-sound'


  pod 'RNCAsyncStorage', :path => '../node_modules/@react-native-community/async-storage'

  pod 'RNCMaskedView', :path => '../node_modules/@react-native-community/masked-view'

  pod 'RNCPushNotificationIOS', :path => '../node_modules/@react-native-community/push-notification-ios'

  pod 'react-native-slider', :path => '../node_modules/@react-native-community/slider'

  pod 'RNFBApp', :path => '../node_modules/@react-native-firebase/app'

  pod 'RNFBAuth', :path => '../node_modules/@react-native-firebase/auth'

  pod 'RNFBMessaging', :path => '../node_modules/@react-native-firebase/messaging'

  pod 'RNFirebase', :path => '../node_modules/react-native-firebase/ios'

  pod 'RNGestureHandler', :path => '../node_modules/react-native-gesture-handler'

  pod 'RNReanimated', :path => '../node_modules/react-native-reanimated'

  pod 'react-native-safe-area-context', :path => '../node_modules/react-native-safe-area-context'

  pod 'RNScreens', :path => '../node_modules/react-native-screens'

  pod 'RNVectorIcons', :path => '../node_modules/react-native-vector-icons'

  target 'Example-tvOSTests' do
    inherit! :search_paths
    # Pods for testing
   

  end

  target 'ExampleTests' do
    inherit! :search_paths
    # Pods for testing
  end

end

target 'Example-tvOS' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

  # Pods for Example-tvOS

end

但是也许有人知道更好的解决方法